Как получить только файлы, созданные после даты с ls?


97

С помощью lsкоманды можно ли показывать только файлы, созданные после определенной даты, часа ...?

Я спрашиваю об этом, потому что у меня есть каталог с тысячами файлов.

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

Я использую, ls -ltrно я должен ждать, чтобы увидеть все файлы ...

Есть эквивалент DIRECTORY/SINCE=dateиз OpenVMS?


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

3
Так как прошло свидание с ls? Вы двое сразились?
Гаррет Олбрайт

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

Ответы:


123

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

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

find . -maxdepth 1 -mtime -1

Обратите внимание, что для поиска файлов, измененных до 24 часов назад, вы должны использовать -mtime +1вместо -mtime -1.


3
Именно то, что я бы сказал. Нет причин ограничивать себя lsздесь, Люк.
Уоррен Янг

15
С GNU find есть и другие возможности. -mmin 5список файлов, измененных за последние 5 минут. -newermt "2011-02-27 13:42"перечисляет файлы, измененные с указанной даты. Вы можете использовать -exec ls --color -ld {} +вместо, -lsчтобы получить обычный цветной дисплей (если вам нравится цветной вывод ls).
Жиль

4
Обратите внимание на знак минус:find . -mmin -5
user7543

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

3
для меня это работает так: найти. -тип f -newermt '15.01.2012 18:09:00'
woohoo


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

5
Привет Трант! В то время как ваше решение является творческим в попытке удовлетворить запрос вопроса об использовании ls, синтаксический анализ вывода ls редко бывает безопасным (например, что происходит с именами файлов, в том числе и с новыми строками?), И нам нравится, что ответы не бывают единичными. лайнеры, а скорее, чтобы объяснить, как они работают, настолько подробно, насколько это актуально.
Дхаг

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) В awk 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.