Saya punya dua masalah dengan skrip saya yang menyalin file dan menambahkan stempel waktu ke nama.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
Di atas menambahkan Test2
sebagai nama file, tapi saya ingin menyimpan nama file file sumber asli yang dalam contoh ini dinamai Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
Masalah lainnya adalah ketika saya menambahkan %r
kode timestamp saya mendapatkan kesalahan yang menyatakan bahwa target "PM" bukan direktori. Saya mencoba untuk mendapatkan stempel waktu 12 jam.
date +"%m-%d-%y-%I:%M:%S_%p"
Jawaban:
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:Jika Anda ingin menambahkan nama file asli, Anda harus memilikinya dalam variabel.
Jika Anda menggunakan bash, Anda dapat menggunakan ekspansi brace sebagai gantinya.
Jika Anda ingin menyalin file ke direktori lain, dan menambahkan stempel waktu ke nama file asli, Anda dapat melakukannya dengan cara ini -
${source##*/}
perluas nilaisource
tanpa bagian hingga yang terakhir/
(menghapus awalan terpanjang yang cocok dengan pola)*/
):Jika
Test1
direktori, disalin secara rekursif, dan file di dalam direktori tetap namanya: hanya direktori tingkat atas yang mendapat cap waktu ditambahkan (misalnyaTest1/foo
disalin keTest1-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.
sumber
cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2