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

StackOverflow https://stackoverflow.com/questions/158044

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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), не поддерживает запись "времени создания".Извините!

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

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

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

cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top