Salah satu masalah Anda adalah bahwa Anda meninggalkan tanda kutip ganda di sekitar substitusi perintah, sehingga output dari date
perintah terpecah pada spasi. Lihat Mengapa skrip shell saya tercekik di spasi putih atau karakter khusus lainnya? Ini adalah perintah yang valid:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Jika Anda ingin menambahkan nama file asli, Anda harus memilikinya dalam variabel.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Jika Anda menggunakan bash, Anda dapat menggunakan ekspansi brace sebagai gantinya.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Jika Anda ingin menyalin file ke direktori lain, dan menambahkan stempel waktu ke nama file asli, Anda dapat melakukannya dengan cara ini - ${source##*/}
perluas nilai source
tanpa bagian hingga yang terakhir /
(menghapus awalan terpanjang yang cocok dengan pola) */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Jika Test1
direktori, disalin secara rekursif, dan file di dalam direktori tetap namanya: hanya direktori tingkat atas yang mendapat cap waktu ditambahkan (misalnya Test1/foo
disalin ke Test1-05-10-15-07:19:42 PM
). Jika Anda ingin menambahkan cap waktu ke semua nama file, itu masalah yang berbeda.
Pilihan format cap waktu adalah ide yang buruk: sulit dibaca untuk manusia dan sulit untuk disortir. Anda harus menggunakan format yang lebih mudah dibaca dan yang dapat diurutkan dengan mudah, yaitu dengan bagian-bagian dalam urutan kepentingan yang menurun: tahun, bulan, hari, jam, menit, detik, dan dengan pemisahan antara bagian tanggal dan bagian waktu.
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")"