Předpokládejme, že ve složce mám asi 10 000 souborů. Používám hodinovou crontab k vyhledání souborů, které byly změněny za posledních 60 minut, a poté je zpracovat.
Vyvolat find -mmin -60
v 01:00:00
Předpokládejme, že první soubor byl upraven v 00:00:00 a snadno nalezen pomocí „find“ v 01:00:00.
Pak předpokládejme, že 10 000. soubor byl upraven také v 00:00:00
, ale je nyní v 01:10 : 00 a „find“ stále tvrdě pracuje na dosažení 10 000. souboru
Takže nyní, o 70 minut později, „find“ vrátí 10 000. soubor, který byl upraven v 00:00:00?
Odpověď
V GNU find
je referenční čas, který se používá k vyhodnocení soubory s -mmin
atd. se vypočítají a uloží při analýze výrazu , takže ve skutečnosti, když find
začíná.
To znamená, že všechna taková časová srovnání používají stejnou časovou referenci pro všechny hodnocené soubory, čas, kdy find
analyzoval jeho příkazový řádek.
Odpověď
Za předpokladu, že GNU najde, je to snadno otestováno:
% 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 %
Takže i když byl b
naposledy upraven alespoň 4 minuty po find
běhu sleep 120
pro a
se stále shoduje.
Protože -mmin
není „POSIX, toto je na implementaci, ale neočekávám chování, které je vidět výše.
Komentáře
- FW IW, (založené na FreeBSD?)
find
na mém Macu také zobrazuje oba soubory sfind . -mmin 1 -exec sleep 120 \; -print
Odpověď
Zkuste následující příkaz jeden po druhém ve dvou terminálech
Terminál 1:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
Terminál 2:
touch -d " 0 seconds ago" /path/to/some/file
výsledek můžeme získat jako
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
Předponou počátečního času příkazu je výsledek hledání. ukazuje, že find
je schopen vyhledávat soubory, které jsou po spuštění příkazu změněny.