Сортування за датою


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: як yuo створив список?

@ user4724: Це не генерує той самий тип виходу для мене, який у вас є - як би Гілз не мав відповідь

Відповіді:


21

У більшості уніцій lsє -tваріант. На manсторінці мого вікна Debian:

-сортувати за часом модифікації

Спробуйте виконати таку команду:

$ ls -lt


мені це потрібно рекурсивно, вибачте
LanceBaynes

+ ls -lt перелічить повний каталог, якщо в ньому зміниться 1 файл.
LanceBaynes

14

Це текстовий файл, який ви намагаєтеся сортувати, чи ви намагаєтесь переглянути список каталогу за датою? Для останнього використовуйте -tпрапор дляls . Для перших див. Зокрема -Mпрапор до сорту GNU, який сортується за трибуквенними абревіатурами місячних назв. Наступні команди сортують по 3-му, 1-му, 2-му та 4-му стовпцям, трактуючи клавішу другого сортування як назву місяця.

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

Вважайте завжди використовувати дати в японському стилі / ISO, завжди в порядку YYYY-MM-DD-HH-MM-SS (тобто найзначніша перша, постійна ширина стовпця). Цей спосіб сортування за датою ідентичний лексикографічному сортуванню.


Не забувайте про початкові нулі пропозиції щодо формату дати. Це формат, який я використовую щоразу, коли сам форматую рядок.
вкрадений

@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 каже: "Відновіть Моніку"

Єдине, що - варіант не дає вам рік для файлів, змінених протягом шести місяців, коли - повний час дає вам саме це. Ви також можете використовувати стиль часу, щоб відформатувати формат дати на ваш смак. наприклад, ls -ltr --time-style +% Y-% m-% d \% H:% M:% S
Беван Томас

Я не впевнений, у чому твій погляд.  ls -tне дає вам режиму та власника файлів, імені хоста та версії операційної системи, а також ціни на чай в Китаї.  ls -tнавіть не відображає дату зміни. Але питання не в відображенні інформації про файли, а в сортуванні файлів за датою модифікації. Ви не вносите відповіді на запитання; ви додаєте цікаву додаткову інформацію. Коли ви отримаєте 50 балів репутації , ви можете розмістити цю інформацію як коментар .
G-Man каже: "Відновіть Моніку"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.