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