Chcesz sortować pliki według daty aktualizacji, w tym podkatalogów

17

Chcę sortować tylko pliki według dat aktualizacji, w tym podkatalogów.

I okazało się ls -lrtR | grep ^-. ale wydaje się, że nie sortuje według dat aktualizacji.

I muszę zapisać tę listę do pliku. Czy to możliwe?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Mam na myśli, że cała lista nie jest uporządkowana według daty, ale najpierw uporządkowana według folderu i uporządkowana według daty.

Chcę najpierw uporządkować listę według daty, zawierającą wszystkie podkatalogi.

Deckard
źródło

Odpowiedzi:

12

Nie jestem pewien, co dokładnie masz na myśli update dates, ale używasz -ropcji, która według człowieka to robi -

-r Odwróć kolejność sortowania, aby uzyskać odwrotną kolejność leksykograficzną lub najstarsze wpisy jako pierwsze (lub największe pliki na końcu, jeśli połączone z sortowaniem według rozmiaru

Myślę, że powinno to być dla Ciebie wystarczające, jeśli potrzebujesz plików posortowanych według czasu.

ls -lRt

Jeśli nie potrzebujesz wszystkich innych rzeczy wymienionych na liście ls, możesz użyć -

ls -1Rt

Aby przechwycić wynik w pliku, możesz użyć operatora przekierowania >i podać nazwę pliku. Możesz więc zrobić coś takiego -

ls -lRt > sortedfile.list

Aktualizacja:

find . -type f -exec ls -lt {} +
jaypal singh
źródło
Mam na myśli ostatnią modyfikację pliku :)
Sortuj wyniki sortowane według folderu i daty. Chcę sortować według daty i folderu ... czy to możliwe?
Przepraszam, czy możesz mi pokazać jakieś wyniki? Nie wykorzystałem sortowania folderu, jeśli go użyłeś ls -lrt.
jaypal singh
// Jaypal Singh, zaktualizowałem swoje wyniki do mojego pytania ↑ :). Naprawdę mam nadzieję, że to rozumiesz i przepraszam za mój zły angielski.
1
Nie udaje się to, jeśli lista plików jest wystarczająco długa, aby wymusić xargswykonanie wielu wywołań ls, ponieważ wtedy pliki są odpowiednio sortowane w ramach każdego lswywołania, ale brakuje spójnego globalnego porządku na wyjściu.
Brandon Rhodes,
19

Z ls, -R będzie ponownie katalogować, a -t będzie sortować według modyfikacji. Jednak przegląda katalogi rekurencyjnie i stosuje -t do każdego katalogu. Nie gromadzi wszystkich plików ze wszystkich katalogów, a następnie nie sortuje. (O ile rozumiem, to drugie jest tym, czego chcesz)

Za pomocą gnu find (1) możesz określić format danych wyjściowych, aby uwzględnić liczbę sekund od epoki i nazwę pliku, a następnie możesz potokować to do sortowania (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Rolf Rander
źródło
Tak GNU find, pomaga. Ale OP działa na AIXmaszynach, więc GNU findnie był dla niego dostępny.
jaypal singh
Szkoda, że lsnie można gromadzić plików przed sortowaniem. lsjest tak szybki w porównaniu do find.
Nathan Reinstate Monica Arthur
lsi findczyta te same dane, więc nie wyobrażam sobie żadnego powodu, dla którego ls powinien być znacznie szybszy niż znajdowanie. W moim systemie wyszukiwanie jest 5 razy szybsze (przeszukuje około pół miliona plików)
Rolf Rander
7
Możesz chcieć uzyskać pełną datę / godzinę, a nie tylko nazwę pliku, ale także ścieżkę na wyjściu, w takim przypadku zmodyfikuj ciąg formatujący: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtuzyskując wpisy wyjściowe, takie jak 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl
Świetny. To naprawdę mi pomogło. Od wieków szukałem sposobu na posortowanie podkatalogów!
bhu Boue vidya