Pobieranie wszystkich plików, które zostały zmodyfikowane w określonym dniu

20

Czy można znaleźć wszystkie phppliki w określonym katalogu, które zostały zmodyfikowane w określonym dniu

używam

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

aby zmodyfikować pliki w ciągu ostatnich 28 dni, ale potrzebuję tylko plików, które zostały zmodyfikowane w następującym dniu: 2011-02-08

Roland
źródło

Odpowiedzi:

22

W najnowszych wersjach find(np. GNU 4.4.0) możesz użyć tej -newermtopcji. Na przykład, aby znaleźć wszystkie pliki, które zostały zmodyfikowane w dniu 2011-02-08

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

Zauważ też, że nie musisz podłączać do grepa, aby znaleźć pliki php, ponieważ find może zrobić to za Ciebie w -nameopcji.

Zapoznaj się z odpowiedzią SO, aby uzyskać więcej sugestii: jak użyć „znajdź”, aby wyszukać pliki utworzone w określonym dniu?

dogbane
źródło
4

Irytujące jest to, że ze standardem nie ma bezpośredniego sposobu find. Najnowsze wersje findsystemów GNU (np. Niewbudowany Linux, Cygwin) i niektóre * BSD mają opcje takie jak -newermtporównanie daty pliku z datą przeliterowaną .

W standardzie findwszystko, co możesz zrobić, to porównać datę pliku z bieżącą datą ( -mtime) lub ze stałym plikiem. Bieżąca data zwykle nie jest przydatna w tym przypadku (odlicza od momentu uruchomienia findpolecenia, podczas gdy większość aplikacji wymaga daty kalendarzowej). To pozostawia ci kłopot z tworzeniem plików tymczasowych w celu zdefiniowania zakresu.

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp
Gilles „SO- przestań być zły”
źródło
2

Masz już prawie prawidłowe polecenie, w przypadku wersji find, które nie pozwalają na użycie dat:

find /var/www/html/dir/ -mtime 27 | grep '\.php'

Ogólnie rzecz biorąc, for find- n oznacza mniej niż , n oznacza równe , + n oznacza „więcej niż”. Tradycyjny findma pewne wyjątki, ale GNU findi inne nowsze wersje, takie jak BSD / Mac OS X, poprawiły je. (Pamiętaj o tym, jeśli kiedykolwiek znajdziesz się w systemie Solaris lub innym komercyjnym systemie Unix).

geekozaur
źródło
1

Za zshpomocą tej funkcjiage można wydrukować tylko nazwy plików, które zostały zmodyfikowane w określonym dniu:

wiek automatycznego ładowania
print -rl - * .php (.e: wiek 2011/02/08 :)

lub, jeśli chcesz wyszukiwać rekurencyjnie:

wiek automatycznego ładowania
setopt Extendedglob
print -rl - ** / *. php (.e: wiek 2011/02/08 :)
don_crissti
źródło