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


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

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


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 говорит «Восстановить Монику»

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.