Di Linux cara membuat file dengan nama tanggal dan waktu saat ini

12

Saya ingin membuat file yang namanya akan menjadi tanggal dan waktu saat ini. Saya dapat membuat file dengan touchperintah. Saya juga bisa mendapatkan waktu saat ini dengan dateperintah. Jadi, saya pikir, saya perlu menyalurkan perintah kedua ke perintah pertama. Bagaimana saya bisa melakukan itu?

Der Hochstapler
sumber

Jawaban:

19

Gunakan nilai balik dari ekspresi shell sebagai argumen untuk touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Hasil: File bernama mis 2012-03-11_14-33-53.

Jawaban ini mengasumsikan Anda menggunakan bash(dijelaskan di manbagian Substitusi Perintah bagian ), tetapi shell lain akan bekerja sama atau hanya sedikit berbeda.

Daniel Beck
sumber
@ MDGao Dan dijelaskan di bagian yang sama dari halaman manual. Saya lebih suka jawaban yang saya berikan, berikut adalah beberapa alasan
Daniel Beck
Saya menghapus komentar saya karena Markdown merusak backticks. terima kasih untuk tautannya @DanielBeck
Mengdi Gao
2
@gasan Cukup mengelilinginya dengan "tanda kutip. Anda bisa membayangkan output datemengganti bagian dari baris perintah, dan touch Sun Mar 11 14:48:31 CET 2012akan membuat nama file Sun, Mardll touch "Sun Mar 11 14:48:31 CET 2012"di sisi lain bekerja dengan baik (kecuali saya tidak yakin seberapa baik titik dua akan bekerja).
Daniel Beck
2
@gasan Kutipan tunggal tidak akan berfungsi karena mereka tidak mengizinkan penggantian perintah atau interpretasi lainnya. Lihat mengutip dalam manual Bash.
slhck
2
@gasan Perbedaannya adalah bahwa konten kutipan tunggal tidak dievaluasi. Cobalah dengan echo "$HOME"dan echo '$HOME'. Itu sebabnya saya menyarankan penggunaan ".
Daniel Beck
0

Anda dapat menggunakan perintah yang lebih sederhana

touch $(date | tr ' ' '-')
Omar Mardini
sumber
Agak kurang elegan dan bisa dibilang lebih portabel, tapi, ya, itu akan berhasil juga.
Scott
OK, karena saya tahu Anda membaca ini, saya akan masuk ke sedikit lebih detail: jawaban Daniel memberikan hasil dalam format yang dikenal dan sepenuhnya dikendalikan. (1) Output dari datebiasanya menunjukkan waktu sebagai jj: mm: dd. Jawaban Anda menghasilkan nama file yang mengandung titik dua. Ini dapat menyebabkan kesalahan pada sistem file berbasis Windows. (2) Output mentah dari permohonan sederhana datebergantung pada lokal; yaitu, disesuaikan dengan bahasa lokal. Coba LANG=de_DE datedan LANG=fr_FR datelihat contohnya. … (Lanjutan)
Scott
(Lanjutkan) ... (2a) Oleh karena itu, dalam peristiwa (tidak mungkin?) Anda pernah mengubah bahasa pada sistem Anda, atau Anda memberikan skrip dan kumpulan file data dari sistem Anda ke seseorang yang sistemnya dikonfigurasikan untuk suatu bahasa yang berbeda, akan ada ketidakcocokan. (Saya tidak yakin bahwa ini akan menjadi masalah nyata, tetapi ini akan menjadi masalah estetika.) (2b) Saya tidak tahu ada lokal yang melakukan ini, tetapi secara teoritis bisa menjadi lokal tempat datemenulis tanggal sebagai mm / dd / yy (atau dd / mm / yy). … (Lanjutan)
Scott
(Lanjutkan) ... Jika Anda pernah menemukan sistem seperti itu, Anda akan memiliki nama file yang mengandung garis miring, dan itu akan menyebabkan kesalahan. (3) Jawaban Daniel memberikan hasil di mana urutan leksikografis (yaitu, abjad), seperti yang dihasilkan oleh lsatau *, sesuai dengan urutan kronologis. Dengan jawaban Anda, semua Frifile akan berada di awal daftar yang diurutkan secara leksikografis, dan Aprdan Augakan muncul sebelum semua bulan lainnya.
Scott