Bagaimana Anda memasukkan tanggal dan waktu dalam nama file?

23

Saya mencoba menjalankan perintah dan ingin memasukkan tanggal dan waktu dalam nama file output.

Ini adalah contoh perintah yang ingin saya jalankan.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Format waktu tanggal bisa apa saja yang masuk akal dengan garis bawah. Bahkan UTC jika AM dan PM tidak dapat digunakan.

visc
sumber
Jika tidak Bash, lalu shell apa yang Anda gunakan?
Ryan
Oh itu bash ...
maksudku
Anda tidak mengirim pesan, Anda mengarahkan ulang. Dan pertanyaannya akan sama jika Anda tidak mengarahkan. Memperbarui judul.
Mikel

Jawaban:

46

Jika Anda ingin menggunakan datetime saat ini sebagai nama file, Anda bisa menggunakan datedan memerintahkan substitusi .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Ini menghasilkan file 2016_04_25_10_30_AM.log(walaupun, dengan datetime saat ini) dibuat dengan hash md5 /etc/mtabsebagai isinya.

Harap perhatikan bahwa nama file yang berisi cap waktu format 12 jam mungkin tidak akan mengurutkan berdasarkan nama seperti yang Anda inginkan. Anda dapat menghindari masalah ini dengan menggunakan cap waktu format 24 jam sebagai gantinya.

Jika Anda tidak memiliki persyaratan untuk menggunakan format tanggal tertentu, Anda dapat mempertimbangkan untuk menggunakan format datetime ISO 8601 yang sesuai. Beberapa contoh cara menghasilkan representasi ISO 8601 datetime yang valid meliputi:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Jika Anda ingin nama file "lebih aman" (mis., Untuk kompatibilitas dengan Windows), Anda dapat menghilangkan titik dua dari bagian waktu.

Harap diingat bahwa semua contoh di atas mengasumsikan waktu sistem lokal. Jika Anda memerlukan representasi waktu yang konsisten di seluruh zona waktu, Anda harus menentukan offset zona waktu atau UTC. Anda bisa mendapatkan offset zona waktu ISO 8601 yang memenuhi syarat dengan menggunakan "% z" di bagian format datepanggilan Anda seperti ini:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Anda bisa mendapatkan waktu UTC dalam datepanggilan Anda dengan menentukan -ubendera dan menambahkan "Z" ke akhir string datetime untuk menunjukkan bahwa waktu adalah UTC seperti ini:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Ryan
sumber
@Mikel Apakah Anda dan saya mengedit silang?
Ryan
Mungkin. Saya baru saja mengubah "subkulit" menjadi "perintah substitusi". Saya sudah selesai sekarang, jadi silakan sunting sesuka Anda.
Mikel
@Mikel Tidak masalah. Saya telah mengirimkan kembali hasil edit saya sekarang.
Ryan
@Mikel Jangan khawatir! Seharusnya aku ingat untuk menyebutnya "perintah substitusi". Terima kasih telah meningkatkan jawabannya!
Ryan
3
Garis bawah adalah karakter yang aneh. Lebih disukai menggunakan ISO-8601 seperti $(date +%FT%T)yang akan diberikan 2016-04-25T10:30:00.
hschou