Buat daftar file berdasarkan tanggal terakhir diedit

104

Saya memiliki direktori: /home/user/

Bagaimana saya dapat membuat daftar setiap file di direktori ini (termasuk yang ada di sub direktori) dan mengurutkannya berdasarkan tanggal terakhir diubah?

Marty
sumber

Jawaban:

172

Kamu bisa memakai:

ls -Rt

dimana -Rberarti rekursif (termasuk subdirektori) dan -tberarti "urutkan berdasarkan tanggal modifikasi terakhir".


Untuk melihat daftar file yang diurutkan berdasarkan tanggal diubah, gunakan:

ls -l -Rt

Alias ​​juga dapat dibuat untuk mencapai ini:

alias lt='ls -lht'
lt

Dimana -hmemberikan keluaran yang lebih mudah dibaca.

mipadi
sumber
16
Terima kasih, itu sempurna. Saya menambahkan -l di sana juga sehingga saya benar-benar dapat melihat tanggalnya jadi bagi siapa saja yang mencari ini nanti, ini- $ ls -lRt
Marty
4
Jika Anda melakukan ini saat diminta dan ingin melihat file yang paling baru diubah, pertimbangkan ls -lrt[RhA]. yang -rmembalikkan urutan, meninggalkan barang-barang baru diedit di bagian bawah daftar ...
dmckee --- mantan moderator kitten
Ini ditambahkan ke -ilamemberi Anda hampir semua informasi yang Anda perlukan. $ ls -ilaRt
Falkenfighter
Saya telah memperluas jawaban ini karena menggunakan ll -Rtadalah solusi sempurna bagi saya karena saya perlu melihat file berdasarkan tanggal yang terakhir diubah. Ini mungkin berguna untuk orang lain.
Mus
@MusTheDataGuy lltidak ada dan bukan perintah. Ini sebagian besar merupakan alias di bash shell, tetapi tidak didefinisikan di sebagian besar / some /? distribusi linux. Beberapa mendefinisikannya sebagai alias ll='ls -l'di /etc/bash.bashrc atau /etc/.bashrc. Dengan demikian itu mungkin tidak berfungsi dan mungkin tidak ada pada sistem OPs. Gunakan ls -l -Rtsetidaknya, seperti lsperintah standar seperti yang didefinisikan oleh posix. Atau sebutkan maksud Anda alias ll='ls -l'; ll -Rt.
KamilCuk
73

Jika Anda menginginkan daftar master tempat semua file diurutkan berdasarkan tanggal modifikasi, menampilkan direktori tempatnya berada, tetapi tidak dikelompokkan berdasarkan direktori , Anda dapat menggunakan ini:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

Hasilnya sangat mirip ls -l:

-rw-r - r-- 1 root root 3892 08/11/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 root root 22946 13/08/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 root root 728 17/08/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 root root 873 08/18/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 root root 2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 root root 9546 19/08/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 root root 2201 19/08/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 root root 926 19/08/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 root root 18052 19/08/2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 root root 1845 19/08/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Bagi Anda yang menggunakan Mac OS X, opsi -printf tidak tersedia di BSD find (Anda akan mendapatkan kesalahan ini :)find: -printf: unknown primary or operator . Untungnya Anda dapat menginstal GNU melalui Homebrew (seharusnya ada opsi untuk Fink dan Macports juga):

brew install findutils

Setelah menginstalnya GNU find akan tersedia untuk Anda sebagai file gfind. Jadi, yang perlu Anda lakukan hanyalah mengubah baris di atas menjadi:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Dijeda sampai pemberitahuan lebih lanjut.
sumber
3
Bagus. Keseluruhan pengelompokan direktori dengan ls -R menjengkelkan.
El Yobo
1
Kode bagus, butuh kira-kira skrip. 5 detik untuk memilah dan mencetak 13k foto di banyak folder berbeda (melalui Cygwin di komputer yang cukup lambat).
Magnus
Oh, sekarang itu luar biasa. Bagi orang-orang (seperti saya) yang tidak begitu akrab dengan findpenulis, argumen tersebut -printfadalah arahan format yang dapat ditemukan di man find(cari contoh kelima printfdi halaman itu).
Owen Blacker
4
Bagi siapa pun yang ingin menggunakan ini di MacOS tetapi tidak ingin repot menginstal findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'akan memberi Anda output yang kira-kira sama di MacOS hanya dengan menggunakan utilitas
bawaan
sort -runtuk membalikkan penyortiran dan memiliki file yang paling baru diubah di atas.
maryisdead
0

MAC OSX 2019

Jika Anda tidak peduli tentang jam berapa itu dibuat tetapi Anda ingin daftar Anda diurutkan, gunakan perintah ini

==> ls -t

Jika Anda ingin memesan dan melihat tanggal dan info pengguna gunakan perintah ini

===> ls -lt

Mussa Charles
sumber
0

Untuk zshpengguna, Anda juga bisa menggunakan qualifier glob (juga didokumentasikan di man zshexpn):

echo *(om)

Di mana osingkatan dari sort order, up dan msingkatan dari waktu modifikasi terakhir .

Ini dapat berguna ketika digunakan dalam for loop atau perintah lain:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

Atau dirantai dengan kualifikasi glob lainnya:

last_modified_file=(*(om[1]))
Ulysse BN
sumber