Mengurutkan berdasarkan tanggal

17

Asli:

23 Jan 2011 10:42 SESUATU 2007.12.20.avi
26 Jun 2009 SESUATU 2009.06.25.avi
12 Feb 2010 SESUATU 2010.02.11.avi
29 Jan 2011 09:17 SESUATU 2011.01.27.avi
11 Feb 2011 20:06 SESUATU 2011.02.10.avi
27 Feb 2011 23:05 SESUATU 2011.02.24.avi

Keluaran:

27 Feb 2011 23:05 SESUATU 2011.02.24.avi
11 Feb 2011 20:06 SESUATU 2011.02.10.avi
29 Jan 2011 09:17 SESUATU 2011.01.27.avi
23 Jan 2011 10:42 SESUATU 2007.12.20.avi
12 Feb 2010 SESUATU 2010.02.11.avi
26 Jun 2009 SESUATU 2009.06.25.avi

Saya membuat daftar di atas (Asli) dengan:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

Bagaimana saya bisa mendapatkan output di mana file terbaru ada di atas?

LanceBaynes
sumber
2
@ user4724: bagaimana Anda membuat daftar?
@ user4724: Itu tidak menghasilkan jenis outpout yang sama dengan yang Anda miliki - tidak masalah karena Gilles punya jawabannya

Jawaban:

21

Pada sebagian besar unices, lsmemiliki -topsi. Dari manhalaman kotak Debian saya:

-t Urutkan berdasarkan waktu modifikasi

Coba perintah berikut:

$ ls -lt

Alexander Pogrebnyak
sumber
saya membutuhkannya secara rekursif, maaf
LanceBaynes
+ ls -lt akan menampilkan direktori lengkap, jika ada 1 file yang berubah.
LanceBaynes
14

Apakah itu file teks yang Anda coba urutkan, atau Anda mencoba melihat daftar direktori berdasarkan tanggal? Untuk yang terakhir, gunakan -tbendera untukls . Untuk yang pertama, lihat secara khusus jenis -Mbendera untuk GNU, yang mengurutkan berdasarkan singkatan nama tiga huruf bulan. Perintah berikut diurutkan berdasarkan kolom 3, 1, 2 dan 4, memperlakukan kunci sortir kedua sebagai nama bulan.

sort -k 3 -k 1M -k2 -k4 in.txt

Pertimbangkan selalu menggunakan tanggal gaya Jepang / ISO, selalu dalam urutan YYYY-MM-DD-HH-MM-SS (yaitu paling signifikan pertama, lebar kolom konstan). Cara penyortiran menurut tanggal ini identik dengan jenis leksikografis.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Jangan lupa nol terkemuka pada saran format tanggal itu. Ini adalah format yang saya gunakan setiap kali saya memformat string sendiri.
stolenmoment
@stolenmoment Anda dapat menggunakan spasi alih-alih nol jika Anda tidak keberatan dengan spasi, poin pentingnya adalah kolom konstan dengan. 2018  5 26berfungsi dengan baik 2018 05 26(selama Anda tidak melalui markup yang menggabungkan spasi berurutan ...), yang tidak berfungsi dengan baik adalah 2018 5 26.
Gilles 'SANGAT berhenti menjadi jahat'
Ya, saya secara refleks menghindari spasi dalam nama file, saya yakin Anda bisa menebak sebabnya.
stolenmoment
3

Saya tidak yakin apakah fungsi itu ada dalam lsperintah ketika pertanyaan awal diajukan, tetapi sekarang Anda dapat menggunakan opsi --full-time.

misalnya,

ls -t --full-time 

akan menyortir dengan waktu terlama di bagian bawah; atau jika Anda menggunakan:

ls -tr --full-time

maka itu akan membalik urutan.

Bevan Thomas
sumber
Pertanyaannya adalah bagaimana cara mengurutkan file berdasarkan tanggal / waktu modifikasi. The -tpilihan menjawab pertanyaan yang benar-benar; --full-timetidak benar-benar relevan.
G-Man Mengatakan 'Reinstate Monica'
Satu-satunya opsi -t tidak memberi Anda tahun untuk file yang diubah dalam waktu enam bulan di mana --full-time memberi Anda persis seperti itu. Anda juga dapat menggunakan gaya waktu untuk memformat format tanggal yang Anda sukai. mis. ls -ltr - gaya-waktu +% Y-% m-% d \% H:% M:% S
Bevan Thomas
Saya tidak yakin apa maksud Anda.  ls -ttidak memberi Anda mode dan pemilik file, nama host dan versi sistem operasi, atau harga teh di Cina.  ls -tbahkan tidak menampilkan tanggal modifikasi sama sekali. Tetapi pertanyaannya bukan tentang menampilkan informasi file, ini tentang mengurutkan file berdasarkan tanggal modifikasi. Anda tidak berkontribusi pada jawaban pertanyaan; Anda menambahkan informasi tambahan yang bagus untuk diketahui. Ketika Anda mendapatkan 50 poin reputasi , Anda dapat memposting informasi semacam itu sebagai komentar .
G-Man Mengatakan 'Reinstate Monica'
-3

rekursif ( R) dan jeda ( |more)

ls -ltR |more
Henrique
sumber