Получение всех файлов, которые были изменены на определенную дату

20

Можно ли найти все phpфайлы в определенном каталоге, которые были изменены на определенную дату

я использую

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

чтобы получить файлы, измененные в течение последних 28 дней, но мне нужны только файлы, которые были изменены на следующую дату: 2011-02-08

Roland
источник

Ответы:

22

В последних версиях find(например, GNU 4.4.0) вы можете использовать эту -newermtопцию. Например, чтобы найти все файлы, которые были изменены на 2011-02-08

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

Также обратите внимание, что вам не нужно переходить в grep для поиска php-файлов, потому что find может сделать это за вас в -nameопции.

Взгляните на этот SO-ответ, чтобы получить дополнительные предложения: Как использовать 'find' для поиска файлов, созданных в определенный день?

кендырь
источник
4

Досадно, что нет никакого прямого пути со стандартом find. Последние версии в findсистемах GNU (например, не встроенный Linux, Cygwin) и некоторые * BSD имеют опции, такие как -newermtсравнение даты файла с указанной датой .

При использовании стандарта findвсе, что вы можете сделать, - это сравнить дату файла с текущей датой ( -mtime) или с фиксированным файлом. Текущая дата, как правило, в этом случае бесполезна (она отсчитывает время с момента запуска findкоманды, тогда как большинству приложений требуется календарная дата). Это оставляет вам возможность создавать временные файлы для определения диапазона.

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Жиль "ТАК - прекрати быть злым"
источник
2

У вас уже есть почти правильная команда, для версий find, которые не позволяют использовать даты:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

В общем, для find- n означает меньше чем , n означает равный , + n означает «больше чем». У традиционного findесть некоторые исключения, но GNU findи другие более новые версии, такие как в BSD / Mac OS X, исправили это. (Имейте это в виду, если вы когда-нибудь окажетесь в Solaris или другой коммерческой системе Unix.)

geekosaur
источник
1

При этом zshвы можете использовать функциюage для печати только имен файлов, которые были изменены на определенную дату:

возраст автозагрузки
print -rl - * .php (.e: возраст 2011/02/08 :)

или, если вы хотите искать рекурсивно:

возраст автозагрузки
Сетопт ExtendedGlob
print -rl - ** / *. php (.e: возраст 2011/02/08 :)
don_crissti
источник