Как использовать команду UNIX find
для поиска файлов, созданных в определенную дату?Как использовать 'find' для поиска файлов, созданных в определенную дату?
ответ
Как указал Макс, вы не можете, но проверка файлов, модифицированных или доступных, не так уж трудна. Я написал об этом tutorial, как и сегодня. Суть которой заключается в использовании -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 ./ -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
Это то, что хотят большинство людей, но оно не получило достаточного количества очков! – sjas 2015-12-31 10:59:32
Возможно, это не сработает с несколькими миллионами файлов в одном каталоге. – 2016-05-19 15:17:09
Я нашел этот скриптлета в скрипт, который удаляет все файлы старше 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 и т. д. вам помогут здесь.
С помощью переключателей -time, -ctime и -mtime вы можете приблизиться к тому, чего вы хотите достичь.
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
Вы не можете , Переключатель -c сообщает вам, когда были изменены разрешения, - проверяет самое последнее время доступа, а -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
«s датой округлением)
Таким образом, чтобы найти любой файл модифицированного 24-го сентября 2008 года, команда будет:
find . -type f -mtime $((($(date +%s) - $(date -d '2008-09-24' +%s))/60/60/24 - 1))
Это будет работать если ваша версия find
не поддерживает предикаты -newerXY
, упомянутые в ответе @Arve:.
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
Кажется, что вопросы, связанные с bash, могут быть разрешены. – Alan 2013-10-21 04:17:50
@MichaelScheper: Я даже не знаю, с чего начать с этого комментария. – 2015-12-14 02:00:57
@Notinlist: Вот ответ: http://meta.stackexchange.com/questions/10249/what-is-migration-and-how-does-it-work К сожалению, выясняется, что срок истек. Жаль, поскольку веб-поиски по-прежнему приземляются здесь, и принятый ответ был полезен для многих людей. – 2015-12-15 22:29:39