Як використовувати команду 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
не має нічого спільного з часом створення , це час зміни inode.
Це два кроки, але я люблю робити це так:
Спочатку створіть файл із певною датою / часом. У цьому випадку файл знаходиться в окті півночі 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 повідомляє, коли востаннє змінилися дозволи, -тестує останній час доступу та -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 буде встановлено на кількість днів між тим і сьогодні. (Оновлення: відніміть один з результатів, щоб вирівняти його з 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
Я думаю, що трохи додаткового "пошуку людини" і пошуку параметрів -ctime / -atime etc. допоможуть вам тут.