Jak korzystać z polecenia UNIX, find
aby wyszukiwać pliki utworzone w określonym dniu?
Jak korzystać z polecenia UNIX, find
aby wyszukiwać pliki utworzone w określonym dniu?
Odpowiedzi:
Jak zauważył Max, nie możesz, ale sprawdzanie plików zmodyfikowanych lub dostępnych nie jest wcale takie trudne. Napisałem samouczek na ten temat, jeszcze dzisiaj. Istotą jest użycie -newerXY
i ! -newerXY
:
Przykład: Aby znaleźć wszystkie pliki zmodyfikowane 7 czerwca 2007:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
Aby znaleźć wszystkie pliki dostępne 29 września 2008 r .:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
Lub pliki, których uprawnienia zostały zmienione tego samego dnia:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Jeśli nie zmienisz uprawnień do pliku, „c” zwykle odpowiada dacie utworzenia.
-newerBt
będzie pasować do czasu urodzenia (utworzenia) pliku .
-newerxt
jest dostępny na FreeBSD od 2001 roku (gdzie po raz pierwszy został udostępniony jako łatka w 1998 roku), kilka innych BSD i GNU znajduje (od 4.3.3 w 2007), w oparciu o HP / UX, który wprowadził -newerXY
(ale gdzie Y == t nie jest obsługiwane).
find location -ctime time_period
Przykłady okresu_czasu:
Ponad 30 dni temu: -ctime +30
Mniej niż 30 dni temu: -ctime -30
Dokładnie 30 dni temu: -ctime 30
ctime
nie ma nic wspólnego z czasem tworzenia , to czas zmiany i-węzła.
To dwa kroki, ale lubię to robić w ten sposób:
Najpierw utwórz plik z określoną datą / godziną. W tym przypadku plik jest o 01.10.2008 o północy
touch -t 0810010000 /tmp/t
Teraz możemy znaleźć wszystkie pliki, które są nowsze lub starsze niż powyższy plik (idąc według daty modyfikacji pliku. Możesz również użyć opcji -anewer w celu uzyskania dostępu i zmiany statusu pliku -cnewer ).
find / -newer /tmp/t
find / -not -newer /tmp/t
Możesz także przeglądać pliki między określonymi datami, tworząc dwa pliki za pomocą dotyku
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
To znajdzie pliki między dwiema datami i godzinami
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
któremu brakuje-newerXY
Możesz to zrobić:
find ./ -type f -ls |grep '10 Sep'
Przykład:
[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
jeśli nie masz find -printf
.
Nie możesz Przełącznik -c informuje, kiedy uprawnienia zostały ostatnio zmienione, -a testuje najnowszy czas dostępu i -m testuje czas modyfikacji. System plików używany przez większość odmian Linuksa (ext3) nie obsługuje rekordu „czasu tworzenia”. Przepraszam!
@Max: ma rację co do czasu utworzenia.
Jednakże, jeśli chcesz obliczyć, jaki upłynął dni argumentu za jeden z -atime
, -ctime
, -mtime
parametry, można użyć następującego wyrażenia
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Zamień „2008-09-24” na dowolną datę, a ELAPSED_DAYS zostanie ustawiona na liczbę dni od tej pory do dzisiaj. (Aktualizacja: odejmij jeden od wyniku, aby wyrównać z find
zaokrągleniem daty).
Tak więc, aby znaleźć dowolny plik zmodyfikowany 24 września 2008 r., Polecenie to:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Działa to, jeśli twoja wersja find
nie obsługuje -newerXY
predykatów wymienionych w odpowiedzi na @Arve:.
Znalazłem ten skrypt w skrypcie, który usuwa wszystkie pliki starsze niż 14 dni:
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
Myślę, że trochę dodatkowego „man find” i szukania parametrów -ctime / -atime itp. Pomoże ci tutaj.