Bagaimana cara menampilkan waktu modifikasi file?

35

Saya ingin metode untuk menemukan dan mencetak waktu modifikasi file, untuk digunakan dalam skrip bash.

Saya telah datang dengan:

ls -l $filename | cut -d ' ' -f '6-8'

Output yang mana:

Jul 26 15:05

Meskipun saya ingin menghindari penguraian ls, juga akan berguna untuk memiliki tahun di sana.

Idealnya saya ingin melihat output yang mirip dengan output default dari dateperintah.

Tue Jul 26 15:20:59 BST 2016

Apa metode lain yang bermanfaat yang tersedia?

Arronikal
sumber

Jawaban:

46

Jangan gunakan ls, ini pekerjaan untuk stat:

stat -c '%y' filename

-cmemungkinkan kita untuk mendapatkan output spesifik, di sini %yakan memberi kita waktu modifikasi terakhir dari file dalam format yang dapat dibaca manusia. Untuk mendapatkan waktu dalam hitungan detik sejak Zaman digunakan %Y:

stat -c '%Y' filename

Jika Anda ingin nama file juga, gunakan %n:

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

Tetapkan penspesifikasi format sesuai kebutuhan Anda. Periksa man stat.

Contoh:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

Jika Anda ingin output seperti Tue Jul 26 15:20:59 BST 2016, gunakan waktu Epoch sebagai input untuk date:

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

Periksa datepenentu format untuk memenuhi kebutuhan Anda. Lihat man datejuga.

heemayl
sumber
5
Lebih jauh dari jawaban ini, ingatlah bahwa lsini diterapkan secara tidak konsisten di seluruh sistem, dan karenanya tidak boleh digunakan untuk segala jenis otomatisasi. Sebagai gantinya, gunakan perintah seperti statdan findsaat menulis skrip.
Paddy Landau
1
luar biasa. Saya belum tahu tentang harta kecil ini. Begitu banyak dari mereka di lingkungan * nix / linux yang belum ditemukan.
Ken Ingram
1

Saya mencoba

ls -l $filename | cut -d ' ' -f '6-8'

tetapi jika tanggalnya kurang dari 10, maka akan kehilangan waktu. Ini karena ruang ekstra sebelum tanggal jika kurang dari 10. Coba ini:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

Perintah awk mencetak bidang yang dipisahkan oleh semua spasi (-F ''). Semoga berhasil. Saya tahu ini tidak menjawab pertanyaan asli tetapi hanya klarifikasi pada perintah ls untuk hanya tanggal dan waktu. Ketika Anda Google "ubuntu mendapatkan tanggal dan waktu file" itu mencantumkan pertanyaan ini di bagian atas, yang merupakan apa yang saya cari, karena saya tidak perlu tahun juga. Untuk tahun, tanggal dan waktu, Anda dapat mencoba salah satu perintah di bawah ini. % m mencetak angka bulan. % b mencetak singkatan bulan: Jatuhkan% H:% M jika Anda tidak membutuhkan jam dan menit. % -d tidak mencetak nol di awal hari.

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
te7
sumber