Bagaimana cara membuat daftar semua file di bawah direktori secara rekursif dan mengurutkan output berdasarkan waktu modifikasi?
Saya biasanya menggunakan ls -lhtc
tetapi tidak menemukan semua file secara rekursif. Saya menggunakan Linux dan Mac.
ls -l
pada Mac OS X bisa memberi
-rw-r--r-- 1 fsr user 1928 Mar 1 2011 foo.c
-rwx------ 1 fsr user 3509 Feb 25 14:34 bar.c
di mana bagian tanggal tidak konsisten atau selaras, jadi solusi harus mempertimbangkan ini.
Solusi sebagian
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
bekerja, tetapi tidak secara rekursif.
Jawaban:
Berikut ini metode yang
stat
disarankan @ johnshen64sumber
find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-
akan mencetak hanya jalur absolut dari file pada OS X.stat
yang Anda gunakan? format Anda di atas tidak berfungsi untuk saya. Aku harus menggunakan berikut:find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-
. Ini denganstat (GNU coreutils) 8.23
Gunakan
find
's-printf
dan semacam pada wajar format tanggal:Ini harus meminimalkan proses garpu dan dengan demikian menjadi yang tercepat.
Contoh jika Anda tidak suka bagian kedua fraksional (yang sering tidak diterapkan dalam sistem file):
EDIT: Standar
find
pada Mac tidak memiliki-printf
. Tetapi tidak sulit untuk menginstal GNU find di Mac (lihat juga tautan itu untuk peringatan lebih lanjut tentang kompatibilitas Mac / Linux danxargs
).sumber
find .
harus bisa mendapatkan semua file. Sesuatu seperti ini:Anda perlu menyetelnya untuk kebutuhan Anda.
sumber
ls
di Linux memiliki--time-format
opsi yang dapat Anda gunakan untuk memastikan bahwa tanggal file terbaru dan yang lebih lama ditampilkan dalam format yang sama.Jawaban untuk pertanyaan serupa di situs Unix Stack Exchange membantu saya karena saya menggunakan zsh:
Cara membuat daftar file yang diurutkan berdasarkan tanggal modifikasi secara rekursif (tidak ada perintah stat tersedia!)
sumber