Sortowanie według daty

17

Oryginalny:

23 stycznia 2011 10:42 Coś 2007.12.20.avi
26 czerwca 2009 Coś 2009.06.25.avi
12 lutego 2010 r. COŚ 2010.02.11.avi
29 stycznia 2011 09:17 COŚ 2011.01.27.avi
11 lutego 2011 20:06 COŚ 2011.02.10.avi
27 lutego 2011 23:05 Coś 2011.02.24.avi

Wynik:

27 lutego 2011 23:05 Coś 2011.02.24.avi
11 lutego 2011 20:06 COŚ 2011.02.10.avi
29 stycznia 2011 09:17 COŚ 2011.01.27.avi
23 stycznia 2011 10:42 Coś 2007.12.20.avi
12 lutego 2010 r. COŚ 2010.02.11.avi
26 czerwca 2009 Coś 2009.06.25.avi

Wygenerowałem powyższą listę (oryginalną) z:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

Jak mogę uzyskać wynik, w którym najnowszy plik znajduje się na górze?

LanceBaynes
źródło
2
@ user4724: jak wygenerowałeś listę?
@ user4724: To nie generuje dla mnie tego samego typu outouta, który masz - bez względu na to, jak Gilles ma odpowiedź

Odpowiedzi:

21

W większości jednorożców lsma -topcję. Ze manstrony mojego pudełka Debiana:

-t sortuj według czasu modyfikacji

Spróbuj wykonać następujące polecenie:

$ ls -lt

Alexander Pogrebnyak
źródło
potrzebuję go rekurencyjnie, przepraszam
LanceBaynes
+ ls -lt wyświetli pełny katalog, jeśli zmieni się w nim 1 plik.
LanceBaynes
14

Czy to plik tekstowy, który próbujesz posortować, czy próbujesz wyświetlić listę katalogów według daty? W tym drugim przypadku użyj -tflagi dols . W przypadku tych pierwszych zobacz w szczególności -Mflagę do sortowania GNU, która sortuje według trzyliterowych skrótów nazw miesięcy. Następujące polecenie sortuje według trzeciej, pierwszej, drugiej i czwartej kolumny, traktując drugi klucz sortowania jako nazwę miesiąca.

sort -k 3 -k 1M -k2 -k4 in.txt

Rozważ zawsze stosowanie dat w stylu japońskim / ISO, zawsze w kolejności RRRR-MM-DD-GG-MM-SS (tj. Najbardziej znacząca pierwsza, stała szerokość kolumny). W ten sposób sortowanie według daty jest identyczne z sortowaniem leksykograficznym.

Gilles „SO- przestań być zły”
źródło
Nie zapomnij wiodących zer w tej sugestii formatu daty. Jest to format, którego używam za każdym razem, gdy sam formatuję ciąg.
stolenmoment
@stolenmoment Możesz użyć spacji zamiast zer, jeśli nie masz nic przeciwko spacjom, ważnym punktem jest stała kolumna z. 2018  5 26działa tak samo dobrze 2018 05 26(dopóki nie przejdziesz przez znaczników, które łączą kolejne spacje…), co nie działa dobrze 2018 5 26.
Gilles „SO- przestań być zły”
Tak, odruchowo unikam spacji w nazwach plików, jestem pewien, że możesz zgadnąć dlaczego.
stolenmoment
3

Nie jestem pewien, czy funkcjonalność była w lspoleceniu, gdy zadano oryginalne pytanie, ale teraz możesz skorzystać z tej opcji --full-time.

na przykład,

ls -t --full-time 

posortuje z najstarszym czasem na dole; lub jeśli używasz:

ls -tr --full-time

wtedy odwróci kolejność.

Bevan Thomas
źródło
Pytanie dotyczy sposobu sortowania pliku według daty / godziny modyfikacji. -tOpcja całkowicie odpowiada na to pytanie; --full-timenie jest tak naprawdę istotne.
G-Man mówi „Przywróć Monikę”
Jedyną opcją -t nie jest rok dla plików zmodyfikowanych w ciągu sześciu miesięcy, podczas gdy -full-time daje dokładnie to. Możesz także użyć stylu czasu, aby sformatować format daty według własnych upodobań. np. ls -ltr - styl-czasu +% Y-% m-% d \% H:% M:% S
Bevan Thomas
Nie jestem pewien, o co ci chodzi.  ls -tnie podaje trybu i właściciela plików, nazwy hosta i wersji systemu operacyjnego ani ceny herbaty w Chinach.  ls -tw ogóle nie wyświetla daty modyfikacji. Ale pytanie nie dotyczy wyświetlania informacji o plikach, lecz sortowania plików według daty modyfikacji. Nie przyczyniasz się do odpowiedzi na pytanie; dodajesz dobrze znane informacje uzupełniające. Gdy zdobędziesz 50 punktów reputacji , możesz opublikować tego rodzaju informacje jako komentarz .
G-Man mówi „Przywróć Monikę”
-3

recursive ( R) i pause ( |more)

ls -ltR |more
Henrique
źródło