Как использовать команду 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 и т.д. помогут вам здесь.