Jak rekursywnie wyświetlić listę wszystkich plików w katalogu i posortować wynik według czasu modyfikacji?
Zwykle używam ls -lhtc
ale nie znajduje wszystkich plików rekurencyjnie. Używam Linuksa i Maca.
ls -l
na Mac OS X może dać
-rw-r--r-- 1 fsr user 1928 Mar 1 2011 foo.c
-rwx------ 1 fsr user 3509 Feb 25 14:34 bar.c
gdzie część daty nie jest spójna lub wyrównana, więc rozwiązanie musi wziąć to pod uwagę.
Rozwiązanie częściowe
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
działa, ale nie rekurencyjnie.
Odpowiedzi:
Oto metoda wykorzystująca
stat
jak sugerował @ johnshen64źródło
find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-
wypisuje tylko bezwzględne ścieżki plików na OS X.stat
czy używasz? Twój format powyżej nie działał dla mnie. Musiałem użyć następujących:find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-
. To jest zstat (GNU coreutils) 8.23
Posługiwać się
find
jest-printf
i posortuj według rozsądnego formatu daty:Powinno to zminimalizować proces widelców i tym samym być najszybszym.
Przykłady, jeśli nie podoba ci się ułamkowa druga część (która i tak często nie jest zaimplementowana w systemie plików):
EDYTOWAĆ: Standard
find
na komputerze Mac nie ma-printf
. Ale nie jest to trudne zainstaluj GNU find na Macu (zobacz także ten link, aby uzyskać więcej zastrzeżeń dotyczących kompatybilności z systemem Mac / Linux ixargs
).źródło
find .
powinien móc pobrać wszystkie pliki. Coś takiego:Musisz dostroić go do swoich potrzeb.
źródło
ls
na Linuksie ma--time-format
opcja, której możesz użyć, aby upewnić się, że zarówno ostatnie, jak i starsze daty plików są wyświetlane w tym samym formacie.Ta odpowiedź na podobne pytanie na stronie Unix Stack Exchange pomogła mi, ponieważ korzystałem z zsh:
Jak rekurencyjnie sortować pliki posortowane według daty modyfikacji (nie jest dostępne polecenie stat!)
źródło