Bagaimana cara membuat daftar (ls) 5 file yang terakhir diubah dalam sebuah direktori?

142

Saya tahu ls -takan menampilkan semua file berdasarkan waktu yang diubah. Tetapi bagaimana saya bisa membatasi hasil ini hanya untuk n file terakhir ?

Ryan
sumber
10
Membalik urutan ls -lrtmungkin membantu seseorang.
PJ Brunet
Suka @PJBrunet. Saya telah membentuk kebiasaan untuk selalu bergaul tharlkarena cenderung memiliki semua yang saya butuhkan.
Adam Grant

Jawaban:

255

Coba gunakan kepala atau ekor. Jika Anda menginginkan 5 file yang paling baru diubah:

ls -1t | head -5

-1 (itu satu) mengatakan satu file per baris dan kepala mengatakan ambil 5 entri pertama.

Jika Anda ingin 5 percobaan terakhir

ls -1t | tail -5
Paul Rubel
sumber
2
Jika saya tidak salah, shell mewakili output lsdalam beberapa kolom, tetapi output dari lsdisalurkan ke perintah berikut dengan 1 file / dir sekaligus
Alex
tampaknya memang begitu. Penyederhanaan yang bagus.
Paul Rubel
3
Ini mengabaikan Total di atas:ls -1t | head -n 6 | tail -n 5
Ryan
2
Saya tidak melihat totalnya, tetapi jika ada yang pasti akan berhasil.
Paul Rubel
22

Jawaban yang diterima hanya mencantumkan nama file, tetapi untuk mendapatkan 5 file teratas, seseorang juga dapat menggunakan:

ls -lht | head -6

dimana:

-l keluaran dalam format daftar

-h membuat keluaran dapat dibaca manusia (yaitu ukuran file muncul dalam kb, mb, dll.)

-t mengurutkan keluaran dengan menempatkan file yang terakhir diubah terlebih dahulu

head -6akan menampilkan 5 file karena lsmencetak ukuran blok pada baris pertama keluaran.

Saya pikir ini adalah pendekatan yang sedikit lebih elegan dan mungkin lebih berguna.

Contoh keluaran:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv

samisnotinsane
sumber
12

Gunakan tailperintah:

ls -t | tail -n 5
Alex
sumber
Ini memberikan 5 tertua. Anda perlu membalik sortir ( ls -tr) atau gunakan, headbukan tail, untuk mendapatkan 5 terbaru.
Headbank
3

Secara default ls -tmengurutkan keluaran dari yang terbaru ke terlama, jadi kombinasi perintah yang digunakan bergantung pada arah mana Anda ingin pengurutan keluaran.

Untuk 5 file terbaru yang diurutkan dari terbaru ke terlama, gunakan headuntuk mengambil 5 baris pertama keluaran:

ls -t | head -n 5

Untuk 5 file terbaru yang diurutkan dari yang terlama ke terbaru, gunakan -rsakelar untuk membalik lsurutan urutan, dan gunakan tailuntuk mengambil 5 baris keluaran terakhir:

ls -tr | tail -n 5
Headbank
sumber
1

ls -tdaftar file berdasarkan waktu pembuatan bukan waktu terakhir diubah. Gunakan ls -ltcjika Anda ingin membuat daftar file berdasarkan waktu terakhir diubah dari terakhir ke pertama (atas ke bawah). Jadi untuk daftar n terakhir:ls -ltc | head ${n}

victrr
sumber
1
Platform / versi mana yang Anda maksud? Dapatkah Anda menyediakan sebuah sambungan? Melihat halaman manual linux menghasilkan kebalikan dari apa yang Anda nyatakan: -t sort by modification time, newest first
Joma