Bagaimana saya bisa membuat `find` menemukan file dalam urutan kronologis terbalik?

17

Saya ingin mencari file dalam subdirektori yang diurutkan berdasarkan cap waktu, dengan yang terbaru terlebih dahulu.

Saya telah melihat halaman manual tetapi tampaknya hanya membiarkan Anda memfilter menurut timestamp daripada mengurutkan berdasarkan timestamp.

Opsi apa yang bisa saya berikan finduntuk mencapai ini? Bergantian, bagaimana saya bisa menggabungkannya dengan alat lain, suka sortmengurutkan berdasarkan stempel waktu?

merlin2011
sumber
1
Anda tidak dapat findmelakukan apa pun dalam urutan tertentu, selain memilih antara pencarian kedalaman-pertama dan pencarian luas-pertama.
Jonathan Leffler
@ merlin2011, harap tinjau pilihan jawaban Anda di sini - jawaban yang dipilih saat ini buggy (akan menghasilkan output yang tidak benar-benar diurutkan dengan benar) ketika ada lebih banyak file yang ditemukan finddaripada yang dapat diteruskan ke satu contoh ls.
Charles Duffy
@CharlesDuffy, Terima kasih atas catatannya! Saya telah memperbarui jawaban yang diterima.
merlin2011

Jawaban:

30

Sementara solusi Paul umumnya OK, itu melibatkan lebih banyak I / O daripada hanya:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2
Peter Mortensen
sumber
Bagaimana jika findmengembalikan jutaan file? Bukankah akan mengurutkan semuanya sebagai satu daftar yang sangat panjang? Apakah masih akan efisien? (Alih-alih menyortir setiap direktori secara mandiri.)
Peter Mortensen
1
Tidak bekerja dengan karakter lucu dalam nama file, seperti baris baru
Boris Brodski
2
Ini hanya layak dikomentari pada jawaban user7385, tapi saya tidak memiliki reputasi untuk melakukan itu. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsVersi baru cutmemiliki opsi -z, jadi nama file dengan baris baru akan berfungsi.
MattBlissett
Jumlah I / O bahkan bukan alasan utama untuk memilih jawaban ini - kebenaran adalah perbedaan yang jauh lebih kritis. The xargs -0 ls -tpendekatan tidak akan bekerja dengan benar ketika ada begitu banyak file yang xargsperlu mulai lslebih dari sekali, tetapi pendekatan ini akan terus berfungsi.
Charles Duffy
@PeterMortensen, "mengurutkan semuanya sebagai satu daftar yang sangat panjang" adalah satu-satunya cara untuk mengurutkan mereka yang benar-benar mengembalikan hasil yang benar. Selain itu, jawaban yang lain / diterima tidak "menyortir setiap direktori secara mandiri" (jika seseorang hanya ingin mengurutkan satu direktori tanpa berulang, orang dapat menggunakannya -maxdepth 1pada find).
Charles Duffy