Jak mogę znaleźć pliki „znajdź” w odwrotnej kolejności chronologicznej?

17

Chcę znaleźć pliki w podkatalogach posortowane według znacznika czasu (utworzenia), od najnowszych.

Patrzyłem na stronę podręcznika, ale wydaje się, że pozwala ona tylko filtrować według znacznika czasu, a nie sortować według znacznika czasu.

Jakie opcje mogę przekazać, aby findto osiągnąć? Alternatywnie, jak mogę połączyć to z innym narzędziem, na przykład sortsortować według znacznika czasu?

merlin2011
źródło
1
Nie można findnic zrobić w określonej kolejności posortowanej, poza wybieraniem między wyszukiwaniem głębokim a wyszukiwaniem głębokim.
Jonathan Leffler,
@ merlin2011, zapoznaj się z wyborem odpowiedzi tutaj - obecnie wybrana odpowiedź jest błędna (wygeneruje wyniki, które nie są właściwie właściwie posortowane), gdy znaleziono więcej plików, findniż można przekazać do pojedynczego wystąpienia ls.
Charles Duffy
@CharlesDuffy, Dzięki za notatkę! Zaktualizowałem zaakceptowane odpowiedzi.
merlin2011

Odpowiedzi:

32

Chociaż rozwiązanie Paula jest ogólnie OK, wymaga więcej operacji wejścia / wyjścia niż po prostu:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2
Peter Mortensen
źródło
Co się stanie, jeśli findzwróci miliony plików? Czy sort nie posortuje ich wszystkich jako jednej bardzo długiej listy? Czy nadal będzie skuteczny? (Zamiast sortować każdy katalog niezależnie.)
Peter Mortensen
1
Nie działa ze śmiesznymi postaciami w nazwach plików, takich jak nowe wiersze
Boris Brodski,
2
To zasługuje tylko na komentarz do odpowiedzi user7385, ale nie mam na to reputacji. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsNowe wersje cutmają opcję -z, więc nazwy plików z nowymi wierszami będą działać.
MattBlissett,
Ilość wejść / wyjść nie jest nawet głównym powodem preferowania tej odpowiedzi - poprawność jest znacznie bardziej krytycznym rozróżnieniem. xargs -0 ls -tPodejście nie będzie działać poprawnie, gdy istnieje tak wiele plików, który xargsmusi zacząć lswięcej niż raz, ale takie podejście będzie nadal funkcjonować.
Charles Duffy
@PeterMortensen, „sortowanie ich wszystkich jako jednej bardzo długiej listy” jest jedynym sposobem na posortowanie tych, które faktycznie zwracają poprawny wynik. Co więcej, druga / zaakceptowana odpowiedź również nie „sortuje każdego katalogu osobno” (jeśli ktoś chciałby posortować tylko jeden katalog bez rekurencji, można go użyć -maxdepth 1na find).
Charles Duffy