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.

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 {} +

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

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
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.