Ini tidak berfungsi karena perintah date
mengembalikan string dengan spasi di dalamnya.
$ date
Wed Oct 16 19:20:51 EDT 2013
Jika Anda benar-benar ingin nama file seperti itu, Anda harus membungkus string itu dengan tanda kutip.
$ touch "foo.backup.$(date)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013
Anda mungkin berpikir string yang berbeda untuk ditambahkan akan menjadi tebakan saya. Saya biasanya menggunakan sesuatu seperti ini:
$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25
Lihat halaman manual untuk tanggal untuk lebih banyak kode pemformatan di sekitar output untuk tanggal & waktu.
Format tambahan
Jika Anda ingin mengambil kendali penuh jika Anda membaca halaman manual Anda dapat melakukan hal-hal seperti ini:
$ date +"%Y%m%d"
20131016
$ date +"%Y-%m-%d"
2013-10-16
$ date +"%Y%m%d_%H%M%S"
20131016_193655
CATATAN: Anda dapat menggunakan date -I
atau date --iso-8601
yang akan menghasilkan output yang identik dengan date +"%Y-%m-%d
. Switch ini juga memiliki kemampuan untuk mengambil argumen untuk menunjukkan berbagai format waktu :
$ date -I=?
date: invalid argument ‘=?’ for ‘--iso-8601’
Valid arguments are:
- ‘hours’
- ‘minutes’
- ‘date’
- ‘seconds’
- ‘ns’
Try 'date --help' for more information.
Contoh:
$ date -Ihours
2019-10-25T01+0000
$ date -Iminutes
2019-10-25T01:21+0000
$ date -Iseconds
2019-10-25T01:21:33+0000
touch foo`date +%F`
juga berfungsi dengan baik.csh
shell...
) alih-alih$(..)
. Kerang C tampaknya tidak mendukung notasi itu untuk subkulit.date +"%Y-%m-%d"
sama dengandate -I
. Saya akan merekomendasikan format iso. Ketepatan dapat ditentukan dengan menambahkan jam, menit, detik, atau ns ke parameter-I
. Contohdate -Iseconds
.Ini meluas ke sesuatu seperti
cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. Ruang sebelum kawat gigi memulai kata baru.Kawat gigi dalam kata-kata yang terpisah, sehingga mereka ditafsirkan secara harfiah. Selanjutnya,
$((…))
adalah sintaks untuk ekspansi aritmatika; outputdate
tidak seperti ekspresi aritmatika. Substitusi perintah menggunakan satu set tanda kurung:$(date)
.Lebih dekat. Anda bisa menyatakan ini dengan kawat gigi sebagai
cp foo.{txt,.backup.`date`}
. Masih ada masalah bahwa outputdate
berisi spasi, sehingga perlu dimasukkan ke dalam tanda kutip ganda. Ini akan berhasil:atau
Format output default
date
tidak cocok untuk nama file, dan bahkan mungkin tidak berfungsi jika lokal menggunakan/
karakter dalam format output default. Gunakan format tanggal YMD sehingga urutan leksikografis pada nama file adalah urutan kronologis (dan juga untuk menghindari ambiguitas antara format tanggal AS dan internasional).sumber
Jika Anda benar-benar ingin menggunakan tanggal verbose, Anda harus melindungi backtick. Format tanggal ini adalah bahwa ia memiliki spasi, no-no dalam shell Unix kecuali Anda menempatkannya di dalam tanda kutip (atau keluar dari mereka dengan cara lain).
Namun, saya lebih suka menggunakan format ISO yang lebih pendek:
sumber
Gunakan fungsi, itu akan membuat hidup Anda lebih mudah. Inilah yang saya gunakan:
sumber
Seperti yang
date
telah secara default spasi putih dalam outputnya, perintah terakhir Anda gagal. Jika Anda mengutip argumen terakhir yang ada di dalamnya"
, itu seharusnya berhasil. Percobaan Anda yang lain hanya salah sintaksDi sini solusi yang mungkin tanpa spasi putih:
atau
Jika Anda menambahkan
untuk masuk
.bashrc
dan kembali / biarkan bash membaca ulang, Anda hanya perlu meneleponbk file.txt
.sumber
--iso-8601
saklar, jadi saya meletakkan tautan di sini. Opsi tanggal GNU: --iso-8601Anda menyalin file ke file cadangan yang namanya dibuat dengan cap waktu ditambahkan
ATAU:
Anda dapat menampilkan konten file menggunakan "cat" dan mengarahkan output ke file cadangan yang namanya dibuat dengan cap waktu yang ditambahkan
Anda juga dapat menggunakan lebih banyak opsi kontrol FORMAT sesuai kebutuhan Anda. Misalnya:% H,% M,% S, dll.
sumber
cat
pengalihancp
?Ketika saya harus membuat cadangan file saya biasanya hanya melakukannya dengan cara ini.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt foo.backup.2017-9-19.txt
sumber
%F
format tanggal menghasilkan 2 digit bulan, danls -l
biasanya memberikan sedikit info lebih dari sekadar nama file.Di bash Anda bisa mengetik:
Yang diperluas ke:
Yang menghasilkan:
Makhluk daging sapi
date -Is
. Saya suka menggunakannya karena mudah diingat, ketik, dan memungkinkan versi pendek (seperti-In
jika Anda presisi aneh).!
memulai penunjuk acara:Dan
$
adalah penunjuk kata:sumber
Jika Anda hanya ingin membuat cadangan file atau direktori lalu mengapa mengetikkan tujuan juga, cukup gunakan ekspansi shell untuk menambahkan tanggal ke akhir nama file salin.
yaitu
yang mengakibatkan
atau cukup gunakan
Tambahkan tanggal sesuai kebutuhan Anda. :)
sumber