it-swarm.com.ru

Как использовать «найти» для поиска файлов, созданных на определенную дату?

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

240
sverrejoh

Как отметил Макс, вы не можете, но проверка файлов, измененных или доступных, не так уж и сложна. Я написал учебник об этом, еще сегодня. Суть которого заключается в использовании -newerXY и ! -newerXY:

Пример: чтобы найти все файлы, измененные 7 июня 2007 года:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

Чтобы найти все файлы, к которым обращались 29 сентября 2008 года:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

Или файлы, разрешение которых было изменено в тот же день:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

Если вы не измените права доступа к файлу, "c" обычно соответствует дате создания.

302
Arve

find location -ctime time_period

Примеры time_period:

  • Более 30 дней назад: -ctime +30

  • Менее 30 дней назад: -ctime -30

  • Ровно 30 дней назад: -ctime 30

65
Chris

Это два шага, но мне нравится делать это так:

Сначала создайте файл с определенной датой/временем. В этом случае файл 2008-10-01 в полночь

touch -t 0810010000 /tmp/t

Теперь мы можем найти все файлы, которые новее или старше указанного выше файла (по дате изменения файла. Вы также можете использовать - anewer для доступа и - cnewer статус файла изменен ).

find / -newer /tmp/t
find / -not -newer /tmp/t

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

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

Это найдет файлы между двумя датами и временем

find / -newer /tmp/t1 -and -not -newer /tmp/t2
45
Mark Biek

Вы могли бы сделать это:

find ./ -type f -ls |grep '10 Sep'

Пример:

[[email protected] etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
33
Jeff MacDonald

Ты не можешь Ключ -c сообщает вам, когда разрешения были изменены в последний раз, -a проверяет самое последнее время доступа и -m проверяет время изменения. Файловая система, используемая большинством версий Linux (ext3), не поддерживает запись "время создания". Сожалею!

12
Max Cantor

@ Макс: правильно о времени создания.

Однако если вы хотите вычислить аргумент истекших дней для одного из параметров -atime, -ctime, -mtime, вы можете использовать следующее выражение

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Замените "2008-09-24" на любую дату, которую вы хотите, и для ELAPSED_DAYS будет задано количество дней между тем и сегодняшним днем. (Обновление: вычтите одно из результата, чтобы выровнять с округлением даты find.)

Итак, чтобы найти любой файл, измененный 24 сентября 2008 года, команда будет выглядеть так:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Это будет работать, если ваша версия find не поддерживает предикаты -newerXY, упомянутые в ответе @Arve :.

8
yukondude

С помощью переключателей -atime, -ctime и -mtime вы можете приблизиться к тому, чего хотите достичь.

2
ayaz