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

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

Ответ 1

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

Ответ 2

find location -ctime time_period

Примеры time_period:

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

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

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

Ответ 3

Это два шага, но мне нравится делать это следующим образом:

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

Ответ 4

Вы можете сделать это:

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

Ответ 5

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

Ответ 6

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

Однако, если вы хотите рассчитать аргумент прошедших дней для одного из параметров -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: answer.

Ответ 7

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

Ответ 8

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

Ответ 9

Я нашел этот скрипт в script, который удаляет все файлы старше 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 и т.д. помогут вам здесь.