Apakah mungkin mendapatkan waktu ketika file dibuka terakhir kali dan mengurutkan semua file dalam direktori pada saat itu?
Ini tergantung pada apa yang Anda maksud dengan "dibuka", tetapi secara umum, ya. Ada tiga cap waktu yang biasanya direkam:
mtime
- diperbarui ketika konten file berubah. Ini adalah waktu file "default" dalam kebanyakan kasus.ctime
- diperbarui ketika file atau metadata (pemilik, izin) -nya berubahatime
- diperbarui ketika file dibacaJadi, secara umum, apa yang ingin Anda lihat adalah atime
file. Anda bisa mendapatkannya dengan stat
atau dengan ls
. Anda dapat menggunakannya ls -lu
untuk melakukan ini, walaupun saya lebih suka menggunakan ls -l --time=atime
(yang seharusnya didukung di hampir semua distribusi Linux modern) karena saya tidak sering menggunakannya, dan ketika saya melakukannya saya dapat mengingatnya dengan lebih baik. Dan untuk mengurutkan berdasarkan waktu, tambahkan -t
bendera ke ls. Jadi begitulah.
Namun ada satu peringatan besar. Memperbarui atime setiap kali file dibaca menyebabkan banyak IO yang biasanya tidak perlu, memperlambat semuanya. Jadi, sebagian besar distribusi Linux sekarang default untuk noatime
opsi mount filesystem, yang pada dasarnya membunuh atimes, atau yang lain relatime
, yang hanya memperbarui atimes setelah batas telah lewat (biasanya sekali per hari) atau jika file benar-benar dimodifikasi sejak membaca sebelumnya. Anda dapat menemukan apakah opsi ini aktif dengan menjalankan mount
perintah.
Juga, perhatikan bahwa waktu akses adalah dengan inode, bukan dengan nama file, jadi jika Anda memiliki hardlink, membaca dari satu akan memperbarui semua nama yang merujuk ke file yang sama.
Dan, ketahuilah bahwa c bukanlah "ciptaan"; penciptaan tidak dilacak oleh sistem file Unix / Linux, yang tampaknya aneh tetapi sebenarnya masuk akal karena sistem file tidak memiliki cara untuk mengetahui apakah itu asli - mungkin file itu dibuat empat puluh tahun yang lalu dan disalin di sini. Dan, nyatanya, banyak editor file bekerja dengan membuat salinan dari aslinya. Jika Anda memerlukan informasi itu, yang terbaik adalah menggunakan sistem kontrol versi suka git
.
mount
halaman manual yang diperbarui .ls
mempersingkat waktu secara default ke presisi yang masuk akal. Untuk melihat waktu dengan presisi penuh yang dapat digunakan--full-time
.ls -ltu
daftar semua file, tunjukkan dan urutkan berdasarkan waktu akses.Dari
man ls
:sumber
The
find
perintah terbaik untuk ini. Lihat-ctime
,-mtime
dan-atime
pilihansumber
Jika cantuman Anda adalah untuk konsumsi manusia, gunakan
ls
dengan salah satu bendera penyortiran tanggal (-tu
untuk akses (baca) waktu, hanya-t
untuk waktu modifikasi (tulis) atau-tc
untuk waktu perubahan inode). Lihat jawaban mattdm untuk informasi lebih lanjut (khususnya peringatan tentang-a
dan definisi-c
).Jika ini untuk konsumsi program, penguraian output
ls
bermasalah . Jika shell Anda adalah zsh, Anda tidak perluls
: zsh memiliki kualifikasi globbing untuk mengurutkan pertandingan dengan meningkatkan akses (*(Oa)
), perubahan inode (*(Oc)
) atau waktu modifikasi (*(Om)
). Huruf kecilo
berubah seiring bertambahnya usia.Jika tidak, jika Anda tahu bahwa nama file tidak mengandung baris baru atau karakter yang tidak dapat dicetak (di lokal saat ini), maka Anda dapat melakukan sesuatu seperti
Jika Anda ingin menjalankan perintah pada banyak file sekaligus, Anda perlu pengaturan lebih lanjut. Catatan yang
act_on_files_by_date $(ls -t)
tidak berfungsi seperti ini, karena nama file yang mengandung karakter wildcard atau spasi akan diperluas dalam hasil substitusi perintah. Kode berikut berfungsi selama tidak ada nama file yang mengandung baris baru atau karakter yang tidak dapat dicetak:Jika Anda ingin mengatasi nama file yang sewenang-wenang, Anda akan mengalami kesulitan tanpa menggunakan alat yang lebih kuat daripada shell standar: zsh, perl, python ...
sumber