Ingin mengurutkan file berdasarkan tanggal pembaruan termasuk sub-direktori

17

Saya hanya ingin menyortir file dengan memperbarui tanggal termasuk sub-direktori.

Saya tahu ls -lrtR | grep ^-. tapi sepertinya tidak mengurutkan berdasarkan tanggal pembaruan.

Dan saya perlu menyimpan daftar ini ke dalam file. Apa itu mungkin?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Maksud saya seluruh daftar tidak dipesan berdasarkan tanggal, tetapi pertama kali dipesan berdasarkan folder, dan dipesan berdasarkan tanggal.

Saya ingin daftar yang pertama kali dipesan berdasarkan tanggal termasuk semua sub-direktori.

Deckard
sumber

Jawaban:

12

Saya tidak yakin apa yang sebenarnya Anda maksud dengan update dates, tetapi Anda menggunakan -ropsi yang menurut manusia melakukan ini -

-r Membalik urutan pengurutan untuk mendapatkan urutan leksikografis terbalik atau entri terlama pertama (atau file terbesar terakhir, jika dikombinasikan dengan urutkan berdasarkan ukuran

Saya pikir ini harus cukup baik untuk Anda jika Anda perlu file diurutkan berdasarkan waktu.

ls -lRt

Jika Anda tidak membutuhkan semua hal lain yang terdaftar lsmaka Anda dapat menggunakan -

ls -1Rt

Untuk menangkap hasil dalam file, Anda dapat menggunakan operator pengalihan >dan memberikan nama file. Jadi Anda bisa melakukan sesuatu seperti ini -

ls -lRt > sortedfile.list

Memperbarui:

find . -type f -exec ls -lt {} +
jaypal singh
sumber
Maksud saya terakhir kali file diubah :)
Hasil sortir dipesan berdasarkan folder dan tanggal. Saya ingin mengurutkan berdasarkan tanggal dan folder .. mungkinkah?
Maaf, bisakah Anda menunjukkan kepada saya beberapa keluaran? Saya tidak cukup mengikuti penyortiran folder jika Anda menggunakan ls -lrt.
jaypal singh
// Jaypal Singh, saya memperbarui output saya ke pertanyaan saya ↑ :). Saya sangat berharap Anda memahaminya dan maaf untuk bahasa Inggris saya yang buruk.
1
Ini gagal jika daftar file cukup panjang untuk memaksa xargsmelakukan beberapa panggilan ls, karena file-file tersebut hanya diurutkan dengan benar dalam setiap lspermintaan tetapi tidak memiliki urutan global yang koheren dalam output.
Brandon Rhodes
19

Dengan ls, -R akan menampilkan kembali direktori dan -t akan mengurutkan berdasarkan modifikasi. Namun, ia menelusuri direktori secara rekursif dan berlaku -t untuk setiap direktori. Itu tidak mengumpulkan semua file dari semua direktori dan kemudian mengurutkan. (Sejauh yang saya mengerti, yang terakhir adalah apa yang Anda inginkan)

Dengan gnu find (1) Anda dapat menentukan format output untuk memasukkan jumlah detik sejak zaman dan nama file, maka Anda dapat mem-pipe ini untuk mengurutkan (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Rolf Rander
sumber
Ya GNU findmemang membantu. Tapi OP bekerja pada AIXmesin jadi GNU findtidak tersedia baginya.
jaypal singh
Sayang sekali lstidak dapat dibuat untuk mengakumulasi file sebelum disortir. lsadalah begitu cepat dibandingkan dengan find.
Nathan ReinstateMonica Arthur
lsdan findmembaca data yang sama, jadi saya tidak bisa membayangkan alasan mengapa ls harus jauh lebih cepat daripada menemukan. Pada sistem saya temukan adalah 5 kali lebih cepat (mencari sekitar setengah juta file)
Rolf Rander
7
Anda mungkin menginginkan tanggal / waktu penuh dan tidak hanya nama file tetapi juga path dalam output, dalam hal ini, modifikasi string pemformatan: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtmenghasilkan entri output seperti 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl
Bagus. Itu sangat membantu saya. Saya telah mencari cara untuk menyortir subdirektori untuk waktu yang lama!
bhu Boue vidya