Ini berfungsi (diperbarui untuk memasukkan saran Daniel Andersson):
find -type f -printf '%T+ %p\n' | sort | head -n 1
Yang ini sedikit lebih portabel dan karena tidak bergantung pada find
GNU ekstensi -printf
, jadi ini juga berfungsi di BSD / OS X:
find . -type f -print0 | xargs -0 ls -ltr | head -n 1
Satu-satunya downside di sini adalah agak terbatas pada ukuran ARG_MAX
(yang harus tidak relevan untuk sebagian besar kernel baru). Jadi, jika ada lebih dari getconf ARG_MAX
karakter dikembalikan (262.144 di sistem saya), itu tidak memberi Anda hasil yang benar. Itu juga tidak sesuai dengan POSIX karena -print0
dan xargs -0
tidak.
Beberapa solusi lain untuk masalah ini diuraikan di sini:Bagaimana cara menemukan file terbaru (terbaru, terlama, terlama) di direktori? – Wiki Greg
Perintah perintah berikut dijamin untuk bekerja dengan segala jenis nama file yang aneh:
find -type f -printf "%T+ %p\0" | sort -z | grep -zom 1 ".*" | cat
find -type f -printf "%[email protected] %T+ %p\0" | \
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //'
stat -c "%y %n" "$(find -type f -printf "%[email protected] %p\0" | \
sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //')"
Menggunakan byte null (\0
) alih-alih karakter umpan baris (\n
) memastikan keluaran find masih dapat dimengerti jika salah satu nama file berisi karakter linefeed.
-z
switch membuat sort dan grep hanya menginterpretasikan null byte sebagai karakter end-of-line. Karena tidak ada saklar untuk kepala, kami menggunakan grep -m 1
sebagai gantinya (hanya satu kemunculan).
Perintah diurutkan berdasarkan waktu eksekusi (diukur pada mesin saya).
-
Perintah pertama akan menjadi yang paling lambat karena harus mengubah waktu setiap file menjadi format yang dapat dibaca manusia terlebih dahulu dan kemudian mengurutkan string tersebut. Perpipaan ke kucing menghindari pewarnaan output.
-
Perintah kedua sedikit lebih cepat. Saat masih melakukan konversi tanggal, menyortir secara numerik (
sort -n
) detik berlalu sejak era Unix sedikit lebih cepat. sed menghapus detik sejak era Unix. -
Perintah terakhir tidak melakukan konversi sama sekali dan harus jauh lebih cepat daripada dua yang pertama. Perintah find itu sendiri tidak akan menampilkan mtime dari file terlama, jadi diperlukan stat.
Halaman manual terkait:temukan – grep – sed – sort – stat