2012-03-08 8 views
21

Chciałbym zbudować polecenie Linuksa, aby wyświetlić listę wszystkich plików (z ich pełnymi ścieżkami) w określonym katalogu (i podkatalogach) uporządkowany według czasu dostępu.Listuj wszystkie pliki (z pełnymi ścieżkami) w katalogu (i podkatalogach), uporządkuj według czasu dostępu

ls można zamówić według czasu dostępu, ale nie podaje pełnej ścieżki. find podaje pełną ścieżkę, ale jedyną dostępną kontrolą nad czasem dostępu jest określenie zakresu z -atime N (dostępnego co najmniej 24 * N godzin temu), co nie jest tym, czego chcę.

Czy istnieje sposób zamówienia według czasu dostępu i uzyskania pełnej ścieżki naraz? Mógłbym napisać skrypt, ale wydaje się, że powinien istnieć sposób, aby to zrobić ze standardowymi programami Linux.

Odpowiedz

20
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

to będzie znaleźć wszystkie pliki i sortować je według daty, a następnie czas. Następnie można użyć awk lub cut wyodrębnić daty i nazwy plików z wyjścia

+0

Działa całkiem dobrze. Rozumiem, że nie jest to ograniczone przez getconf ARG_MAX? – Andrew

+0

Racja, nie jest ograniczona przez ARG_MAX, ponieważ nie przekazuje go jako argumentów, ale zamiast tego potokuje wyjście. Nie ma ograniczeń co do ilości danych przesyłanych między programami. – Alex

+0

Świetnie! Dzięki stary! Bardzo dobrze wiedzieć o tym ograniczeniu, ponieważ mój katalog zawiera wiele, wiele plików. – Andrew

11

można spróbować:

ls -l $(find /foo/bar -type f) 
  • można dodać inne opcje (np -t do sortowania) do polecenia ls, aby osiągnąć swój cel.
  • również można dodać kryteria wyszukiwania, aby find cmd
+1

I nieco zmodyfikowany i dostaliśmy dokładnie to, co chcę z ls -ult $ (znaleźć KSIĄŻKA -type f) | grep -o "[^] \ + $" Dzięki! – Andrew

+2

Należy pamiętać, że tak jak wyjście '$ (find DIRECTORY -type f)' jest używane jako argument wiersza poleceń do 'ls -ult', będziesz ograniczony do' getconf ARG_MAX' plików – Alex

+0

Dzięki za głowy w górę, Alex! – Andrew

3

find . -type f | xargs ls -ldtls -l powinno wystarczyć, o ile nie ma tam tak dużo plików, które uderzają polecenia jak limitu argument i ikra 2 instancje ls.

1
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

Odpowiedź Alexa nie zadziałała, ponieważ miałem pliki starsze niż rok i sortowanie zostało pomieszane. Powyższe dodaje parametr --full-time, który nuetralizuje wartości daty/czasu i umożliwia ich sortowanie niezależnie od tego, ile mają lat.

+0

Parametr '--full-time' nie istnieje na Mac OS X. @ Rozwiązanie Kent'a działa bardzo dobrze. –

1
pwd | xargs -I % find % -type f 
Powiązane problemy