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ı date
boş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 Test1
dizinse, ö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")"