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