Сортировка по дате

17

Оригинал:

23 января 2011 10:42 ЧТО-ТО 2007.12.20.avi
26 июня 2009 ЧТО-ТО 2009.06.25.avi
12 февраля 2010 ЧТО-ТО 2010.02.11.avi
29 января 2011 09:17 ЧТО-ТО 2011.01.27.avi
11 февраля 2011 20:06 ЧТО-ТО 2011.02.10.avi
27 февраля 2011 23:05 ЧТО-ТО 2011.02.24.avi

Выход:

27 февраля 2011 23:05 ЧТО-ТО 2011.02.24.avi
11 февраля 2011 20:06 ЧТО-ТО 2011.02.10.avi
29 января 2011 09:17 ЧТО-ТО 2011.01.27.avi
23 января 2011 10:42 ЧТО-ТО 2007.12.20.avi
12 февраля 2010 ЧТО-ТО 2010.02.11.avi
26 июня 2009 ЧТО-ТО 2009.06.25.avi

Я создал вышеупомянутый список (Оригинал) с:

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

Как я могу получить вывод, где самый новый файл находится вверху?

LanceBaynes
источник
2
@ user4724: как ты создал список?
@ user4724: Это не генерирует для меня такой же тип выхода, какой бы у вас ни был ответ

Ответы:

21

На большинстве офисов lsесть -tопция. Со manстраницы моей коробки Debian:

сортировать по времени модификации

Попробуйте следующую команду:

$ ls -lt

Александр Погребняк
источник
мне это нужно рекурсивно, извините
LanceBaynes
+ ls -lt выдает полный каталог, если в нем изменяется 1 файл.
LanceBaynes
14

Это текстовый файл, который вы пытаетесь отсортировать, или вы пытаетесь просмотреть список каталогов по дате? Для последнего используйте -tфлагls . Что касается первого, смотрите, в частности, -Mфлаг GNU sort, который сортирует по трехбуквенным сокращениям названий месяцев. Следующая команда сортирует по 3-му, 1-му, 2-му и 4-му столбцам, обрабатывая второй ключ сортировки как имя месяца.

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

Обязательно всегда используйте даты в японском / ISO стиле, всегда в порядке ГГГГ-ММ-ДД-ЧЧ-ММ-СС (т. Е. Наиболее значимыми в первую очередь постоянная ширина столбца). Этот способ сортировки по дате идентичен лексикографической сортировке.

Жиль "ТАК - прекрати быть злым"
источник
Не забывайте начальные нули в этом предложении формата даты. Этот формат я использую всякий раз, когда форматирую строку самостоятельно.
украденный момент
@stolenmoment Вы можете использовать пробелы вместо нулей, если вы не возражаете против пробелов, важным моментом является постоянный столбец с. 2018  5 26работает точно так же, как 2018 05 26(до тех пор, пока вы не пройдете разметку, которая объединяет последовательные пробелы ...), то, что не работает хорошо, так это 2018 5 26.
Жиль "ТАК - перестань быть злым"
Да, я рефлексивно избегаю пробелов в именах файлов, я уверен, что вы можете догадаться, почему.
украденный момент
3

Я не уверен, была ли функциональность в lsкоманде, когда задавался оригинальный вопрос, но теперь вы можете использовать эту опцию --full-time.

например,

ls -t --full-time 

сортирует с самым старым временем внизу; или если вы используете:

ls -tr --full-time

тогда он обратит порядок.

Беван Томас
источник
Вопрос в том, как отсортировать файл по дате / времени изменения. -tВариант отвечает на этот вопрос полностью; --full-timeне очень актуально.
G-Man говорит: «Восстановите Монику»
Единственная опция -t не дает вам год для файлов, измененных в течение шести месяцев, тогда как --full-time дает именно это. Вы также можете использовать стиль времени для форматирования даты по своему вкусу. например, ls -ltr - стиль времени +% Y-% m-% d \% H:% M:% S
Беван Томас,
Я не уверен, в чем ваша точка зрения.  ls -tне дает вам режим и владельца файлов, имя хоста и версию операционной системы, или цену чая в Китае.  ls -tдаже не отображает дату модификации вообще. Но вопрос не в отображении информации о файле, а в сортировке файлов по дате модификации. Вы не участвуете в ответе на вопрос; Вы добавляете дополнительную информацию. Когда вы получаете 50 очков репутации , вы можете публиковать такую ​​информацию в качестве комментария .
G-Man говорит «Восстановить Монику»
-3

рекурсивный ( R) и пауза ( |more)

ls -ltR |more
Henrique
источник