Saya mencoba untuk menambahkan tanggal saat ini ke akhir nama file seperti ini:
TheFile.log.2012-02-11
Inilah yang saya miliki sejauh ini:
set today = 'date +%Y'
mkdir -p The_Logs &
find . -name The_Logs -atime -1 -type d -exec mv \{} "The_Logs_+$today" \; &
Namun yang saya dapatkan hanyalah nama file tersebut, dan tidak ada tambahannya. Bagaimana cara menambahkan tanggal saat ini ke nama file?
:
karena itu akan dibaca sebagai host di rsync dan scp. stackoverflow.com/a/37143274/390066Jawaban:
Kemungkinan besar itu adalah penggunaan Anda terhadap
set
. Itu akan menetapkan 'hari ini', '=' dan outputdate
program ke parameter posisi (alias argumen baris perintah). Anda hanya ingin menggunakan shell C (yang Anda beri tag ini sebagai "bash", jadi kemungkinan tidak), Anda ingin menggunakan:Perhatikan kurangnya ruang di sekitar tanda sama dengan.
Anda juga tidak ingin menggunakan
&
di akhir pernyataan Anda; yang menyebabkan shell tidak menunggu perintah selesai. Terutama ketika seseorang mengandalkan yang berikutnya. Thefind
perintah bisa gagal karena dimulai sebelummkdir
.sumber
Skrip Bash untuk menyuntikkan tanggal ke nama file:
Kode bash ini dalam file disebut
a.sh
Saat dijalankan, cetak:
Penjelasan kode:
Menafsirkan skrip dengan penerjemah / bin / bash. Buat variabel baru yang disebut hari ini. Jalankan perintah tanggal, lewat bendera Y, m, d, H, M, S untuk mengkonfigurasi output. Tempatkan hasilnya ke dalam variabel tanggal.
Buat variabel baru bernama nama file, mengelilingi variabel $ today dengan sisa teks nama file statis. lalu gema nama file ke layar.
Cram itu menjadi satu-liner untuk meningkatkan lulz:
sumber
Anda tampaknya telah mencampuradukkan beberapa hal.
set today = 'date +%Y'
terlihat seperti sintaks tcsh, tetapi bahkan dalam tcsh ia memberikan stringdate +%Y
ke variabeltoday
, itu tidak menjalankandate
perintah. Karena Anda mungkin menggunakan bash atau shell POSIX lainnya, sintaks dari suatu tugas adalahtoday=some_value
(tanpa spasi di sekitar tanda sama dengan). Untuk menjalankan perintah dan menetapkan outputnya ke variabel, gunakan substitusi perintah :(Saya juga telah menyelesaikan spesifikasi tanggal). Anda dapat menggunakan backquotes alih-alih tanda kurung dolar, tetapi cenderung menjadi bingung secara visual dengan forward quotes, dan aturan ketika Anda membutuhkan kutipan di dalam perintah backquoted cukup kompleks dan bergantung pada implementasi, jadi lebih baik tidak berpegang teguh pada
$(…)
(yang memiliki efek yang sama dengan sintaksis saner).Anda menggunakan
&
di akhir beberapa perintah. Itu membuat perintah dieksekusi di latar belakang, yang tidak diinginkan di sini. Saya menduga Anda maksud&&
, yang berarti mengeksekusi perintah berikutnya hanya jika perintah pertama berhasil.Alternatif untuk menggunakan
&&
setelah setiap perintah adalah memulai skrip Andaset -e
. Ini memberitahu shell untuk berhenti mengeksekusi skrip segera setelah perintah apa pun mengembalikan status bukan nol (kecuali untuk perintah dalamif
kondisi dan beberapa kasus lainnya).find
Perintah Anda baik-baik saja tetapi mungkin tidak melakukan apa yang ingin Anda lakukan (meskipun saya tidak tahu pasti apa itu).Anda sedang membuat direktori dengan
mkdir
dan kemudian segera melewatinyafind
. Itu tidak akan berguna kecuali direktori sudah ada. Apakah Anda bermaksud membuat direktori untuk log hari ini dan memindahkan file terbaru dariThe_Logs
ke direktori bernama egThe_Logs.2012-02-11
?Atau Anda bermaksud mengganti nama file log hari ini untuk menambahkan akhiran
$today
? Itu membutuhkan penghitungan nama file yang berbeda untuk setiap file untuk bergerak.Perhatikan bahwa saya menggunakan
-mtime
, untuk memindahkan file berdasarkan waktu modifikasi mereka, dan bukan-atime
, yang merupakan waktu file terakhir dibaca (jika sistem Anda melacak itu - jika tidak, atime mungkin sejauh mtime).sumber
Anda dapat mengganti nama file dengan cap waktu ditambahkan ke sana
sumber
Ini:
harus bekerja. Meskipun, sepertinya Anda menggunakan csh dan solusi saya menghapus tanda + mungkin tidak berfungsi untuk Anda tetapi tidak ada salahnya untuk mencoba. Menutup variabel Anda di kurung kurawal {}, selalu merupakan ide bagus untuk mencegah ekspansi variabel yang tidak terduga.
sumber