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

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

9 ответов


как указал Макс, вы не можете, но проверка файлов, измененных или доступных не так уж сложно. Я написал учебник об этом, уже сегодня. Суть которой заключается в использовании -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 " обычно будет соответствовать дате создания.


find location -ctime time_period

примеры time_period:

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

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

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


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

сначала создайте файл с определенной датой / временем. В этом случае, файл 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

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

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

пример:

[root@pbx 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

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


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

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

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

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

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

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

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


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


cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$//; print  . "\n";'` /some_destination_dir

Я нашел этот сценарий в скрипте, который удаляет все файлы старше 14 дней:

CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n "." >> $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG

Я думаю, что немного больше "человек находит"и ищет-ctime / - atime и т. д. параметры помогут вам здесь.