Załóżmy, że mam około 10 000 plików w folderze. Używam crontab co godzinę, aby znaleźć pliki zmodyfikowane w ciągu ostatnich 60 minut, a następnie je przetworzyć.

Wywołaj find -mmin -60 o 01:00:00

Załóżmy, że pierwszy plik został zmodyfikowany o godzinie 00:00:00 i łatwo go znaleźć za pomocą polecenia „znajdź” o godzinie 01:00:00.

Następnie załóżmy, że 10.000-ty plik również został zmodyfikowany o godzinie 00:00:00

ale jest teraz o godzinie 01:10 : 00 i „find” nadal ciężko pracuje, aby dotrzeć do 10 000-tego pliku

Więc teraz, 70 minut później, polecenie „find” zwróci 10.000. plik, który został zmodyfikowany o 00:00:00?

Odpowiedź

W GNU find, czas odniesienia używany do oceny pliki z -mmin itp. są obliczane i zapisywane podczas analizowania wyrażenia , więc obowiązuje, gdy .

Oznacza to, że wszystkie takie porównania czasowe używają tego samego odniesienia czasu dla wszystkich ocenianych plików, czyli czasu, w którym find przeanalizował jego wiersz poleceń.

Odpowiedź

Zakładając, że GNU find, można to łatwo przetestować:

% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 % 

A więc chociaż b był ostatnio modyfikowany co najmniej 4 minuty po find uruchomieniu dla a, nadal pasuje.


Ponieważ -mmin nie „t POSIX, to zależy od implementacji, ale spodziewałbym się zachowania opisanego powyżej.

Komentarze

  • FW IW, (oparty na FreeBSD?) find na moim Macu pokazuje również oba pliki z find . -mmin 1 -exec sleep 120 \; -print

Odpowiedź

Wypróbuj następujące polecenie jedno po drugim na dwóch terminalach

Terminal 1:

find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file" 

Terminal 2:

touch -d " 0 seconds ago" /path/to/some/file 

jesteśmy w stanie otrzymać wynik jako

Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file 

I” m poprzedzam czas rozpoczęcia polecenia wynikiem find. pokazuje, że find jest w stanie wyszukiwać pliki, które zostały zmodyfikowane po czasie rozpoczęcia polecenia.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *