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?


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.