Як отримати лише файли, створені після дати з ls?


97

За допомогою lsкоманди, чи можна показувати лише файли, створені після певної дати, години ...?

Я прошу це, бо в мене є каталог із тисячею файлів.

Я хочу так побачити всі файли, створені з вчорашнього дня.

Я використовую, ls -ltrале мені потрібно чекати, щоб побачити всі файли ...

Є еквівалент DIRECTORY/SINCE=dateOpenVMS?


1
lsперераховує файли, але він не пропонує багато, щоб вибрати, які файли потрібно перелічити, або вихідний формат Використовуйте глобулінг (підстановочні символи оболонок) або findколи потрібно вибрати файли за іменем або метаданими (наприклад, датою).
Жиль

3
То як пішла дата з лс? Ви двоє вдарили?
Гаррет Олбрайт

3
З zsh:ls -1 -- *(.m-1)
don_crissti

Відповіді:


123

За допомогою findкоманди можна знайти всі файли, які були змінені через певну кількість днів.

Наприклад, для пошуку всіх файлів у поточному каталозі, які були змінені з вчорашнього дня (24 години тому), використовуйте:

find . -maxdepth 1 -mtime -1

Зауважте, що для пошуку файлів, змінених до 24 годин тому, ви повинні використовувати -mtime +1замість них -mtime -1.


3
Те саме, що я сказав би. Тут немає жодних причин обмежувати себе ls, Люк.
Warren Young

14
З пошуку GNU є й інші можливості. -mmin 5перелічує файли, змінені за останні 5 хвилин. -newermt "2011-02-27 13:42"перелічує файли, змінені з вказаної дати. Ви можете використовувати -exec ls --color -ld {} +замість, -lsщоб отримати звичайний кольоровий дисплей (якщо вам подобається кольоровий вихід ls).
Жиль

3
Зверніть увагу на знак мінус:find . -mmin -5
user7543

і -maxdepth 1 можна збільшити до будь-якого n значення для пошуку файлів під рівнем підкаталога
anshuman

3
для мене це працює так: знайти. -тип f -newermt '15.01.2012 18:09:00'
woohoo

14
find . -type f -newermt '1/30/2017 0:00:00'

Тут будуть знайдені всі файли, змінені після конкретної дати.


1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"

5
Привіт Трант! Хоча ваше рішення креативне у спробі поважати запит запитання на використання ls, аналіз виведення ls рідко безпечний (наприклад, що відбувається з іменами файлів, включаючи нові рядки тут?), І нам це подобається, щоб відповіді не були просто одно- лайнерів, а краще пояснити, як вони працюють якомога детальніше, наскільки це актуально.
dhag

1
Проблеми: (1) У моїй системі, dateкаже Jun 03, але lsкаже Jun  3, тому це не працює. (2) Тиждень тому, дата 27 травня  ls -l | grep "May 27", знайде файли, змінені в цей день, але також файли, модифіковані 27 травня будь-якого іншого року, і файли з написом "27 травня". (І якщо ви думаєте, що це абсолютно нечітка проблема, погляньте на "10 грудня" .) (3) І, якщо вам вдалося dateсказати Jun 2, похвалювання за це знайдеться Jun 20наскрізь Jun 29, але не Jun  2(з двома пробілами). … (Продовження)
G-Man

1
(Продовження)… (4) ОП використовував ls -ltrдля отримання останніх модифікованих файлів у кінці списку. Якщо ви збираєтеся побачити дату, цього робити не потрібно (окрім отримання файлів 27 травня 2015 року в кінці списку, після файлів 27 травня 2014 року, 27 травня 2013 року тощо). (5) На жаль, print $2, $3це рівнозначно print $2" "$3і його набагато простіше читати - особливо, коли є три інших рівня цитат.
G-Man

ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo

0

Сподіваюся, це працює:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Тут:

$6 indicates position of month
$7 indicates day of the month

ця команда вище видає всі назви файлів, які створені 1 травня по 31 травня або після нього

якщо ви хочете також надрукувати дату на консолі, спробуйте це

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Якщо ви хочете вказати шлях до каталогу, ви можете спробувати це

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

З багатьох причин не дуже гарно ідея аналізувати lsвихід. І не всі розмовляють англійською :-)
Люк М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.