Как использовать команду UNIX find
для поиска файлов, созданных в определенный день?
Как использовать команду 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' обычно соответствует дате создания.
-newerBt
совпадает по времени рождения (создания) файла .
-newerxt
он доступен во FreeBSD с 2001 года (где он был впервые представлен в виде патча в 1998 году), некоторые другие BSD и GNU находят (начиная с 4.3.3 в 2007 году) на основе поиска HP / UX, который был представлен -newerXY
(но где Y == t не поддерживается).
find location -ctime time_period
Примеры time_period:
Более 30 дней назад: -ctime +30
Менее 30 дней назад: -ctime -30
Ровно 30 дней назад: -ctime 30
ctime
не имеет никакого отношения ко времени создания , это время смены инода.
Это два шага, но мне нравится делать это так:
Сначала создайте файл с определенной датой / временем. В этом случае файл 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
которого не хватает-newerXY
Вы могли бы сделать это:
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
stat
если у вас ее нет find -printf
.
Ты не можешь Ключ -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 :.
Я нашел этот сценарий в сценарии, который удаляет все файлы старше 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 и т. Д.