Dosya kopyalama ve zaman damgası ekleme


13

Komut dosyamda dosyaları kopyalayan ve ada bir zaman damgası ekleyen iki sorun var.

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")

Yukarıdaki Test2dosya adı ekler , ancak ben bu örnekte adlandırılmış özgün kaynak dosyasının dosya adını tutmak istiyorum Test.

cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")

Diğer bir sorun zaman %rdamgası kodu eklemek zaman hedef "PM" bir dizin olmadığını belirten hata alıyorum. Zaman damgasını 12 saat olarak almaya çalışıyorum.


AM / PM eklemek dosya adına fazladan boşluk ekler. Eğer böyle bir şey denemek için ısrar ediyorsanız: cp -ra / home / bpacheco / Test1 "/ home / bpacheco / Test2 - $ (tarih +% m-% d-% y-% r)"
Romeo Ninov

2
Veyadate +"%m-%d-%y-%I:%M:%S_%p"
don_crissti

Yanıtlar:


12

Sorunlarınızdan biri, komut ikamesinin etrafındaki çift tırnak işaretlerini dışarıda bırakmış olmanızdır, bu nedenle komuttan gelen çıktı dateboşluklara bölünmüştür. Bkz. Kabuk betiğim neden boşlukta veya diğer özel karakterlerde boğuluyor? Bu geçerli bir komuttur:

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"

Orijinal dosya adına eklemek istiyorsanız, bunu bir değişkente bulundurmanız gerekir.

source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"

Eğer bash kullanıyorsanız, bunun yerine küme ayracı genişletmeyi kullanabilirsiniz.

cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}

Dosyayı farklı bir dizine kopyalamak ve zaman damgasını orijinal dosya adına eklemek istiyorsanız, bu şekilde yapabilirsiniz - parçanın sonuna kadar değerine ${source##*/} genişler (kalıpla eşleşen en uzun önek kaldırılır ):source/*/

source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"

Bir Test1dizinse, özyinelemeli olarak kopyalanır ve dizinin içindeki dosyalar adlarını korur: yalnızca üst düzey dizine bir zaman damgası eklenir (örneğin Test1/foo, kopyalanır Test1-05-10-15-07:19:42 PM). Tüm dosya adlarına bir zaman damgası eklemek istiyorsanız, bu farklı bir sorundur.

Zaman damgası biçimi seçiminiz kötü bir fikirdir: insanlar için okumak zor ve sıralamak zor. Okunması daha kolay ve kolayca sıralanabilen bir biçim kullanmalısınız, örneğin, azalan önem sırasına sahip parçalar: yıl, ay, gün, saat, dakika, saniye ve tarih bölümü ile saat bölümü arasında bir ayrım.

cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"

Gilles, ilk komut IMHO'yu çalışmaz, çift tırnakların pozisyonlarını kontrol edin. Ve soruya benim
yorumuma

@RomeoNinov İlk komutun sorunu nedir? Çalıştırıp bir hata mı aldınız?
Gilles 'SO- kötü olmayı bırak'

Haklısın, tarih komutu alt kabukta yürütüldü
Romeo Ninov

Gilles, yukarıdaki örneğinizi kullanarak, yukarıda belirtilen zaman damgası bilgileriyle dosyayı başka bir dizine nasıl kopyalarım. Aşağıdaki komut çalışmaz:cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2
Brian

@Brian Yorumunuzu anladığımdan emin değilim, ancak düzenlememi görün.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.