2008-10-01 9 views
205

Как использовать команду UNIX find для поиска файлов, созданных в определенную дату?Как использовать 'find' для поиска файлов, созданных в определенную дату?

+5

Кажется, что вопросы, связанные с bash, могут быть разрешены. – Alan 2013-10-21 04:17:50

+0

@MichaelScheper: Я даже не знаю, с чего начать с этого комментария. – 2015-12-14 02:00:57

+1

@Notinlist: Вот ответ: http://meta.stackexchange.com/questions/10249/what-is-migration-and-how-does-it-work К сожалению, выясняется, что срок истек. Жаль, поскольку веб-поиски по-прежнему приземляются здесь, и принятый ответ был полезен для многих людей. – 2015-12-15 22:29:39

ответ

255

Как указал Макс, вы не можете, но проверка файлов, модифицированных или доступных, не так уж трудна. Я написал об этом 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' обычно соответствует дате создания.

26

Вы можете сделать это:

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 
+0

Это то, что хотят большинство людей, но оно не получило достаточного количества очков! – sjas 2015-12-31 10:59:32

+2

Возможно, это не сработает с несколькими миллионами файлов в одном каталоге. – 2016-05-19 15:17:09

-5

Я нашел этот скриптлета в скрипт, который удаляет все файлы старше 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 и т. д. вам помогут здесь.

2

С помощью переключателей -time, -ctime и -mtime вы можете приблизиться к тому, чего вы хотите достичь.

60

find location -ctime time_period

Примеры TIME_PERIOD:

  • Более 30 дней назад: -ctime +30

  • Менее 30 дней назад: -ctime -30

  • Ровно 30 дней назад: -ctime 30

42

Это два шага, но я хотел бы сделать это следующим образом:

Сначала создайте файл с определенной даты/времени. В этом случае файл 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 
12

Вы не можете , Переключатель -c сообщает вам, когда были изменены разрешения, - проверяет самое последнее время доступа, а -m проверяет время модификации. Файловая система, используемая большинством разновидностей Linux (ext3), не поддерживает запись «время создания». Сожалею!

7

@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:.

-3
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir 

 Смежные вопросы

  • Нет связанных вопросов^_^