Tegyük fel, hogy körülbelül 10 000 fájl van egy mappában. Óránkénti crontab segítségével kerestem meg az elmúlt 60 percben módosított fájlokat, majd dolgozzam fel őket. >
Tegyük fel, hogy az első fájlt 00: 00: 00-kor módosították, és 01: 00: 00-kor a “keresés” könnyen megtalálta.
Akkor tegyük fel, hogy a 10 000. fájlt is 00: 00: 00-kor módosították.
de most 01: 10-kor van : 00 és a “find” továbbra is keményen dolgozik a 10 000. fájl eléréséért.
Tehát most, 70 perc múlva, a “megtalálás” visszaadja a 10 000. 00:00:00 órakor módosított fájl?
Válasz
A GNU-ban find
a kiértékeléshez használt referenciaidő a -mmin
stb. fájlokkal rendelkező fájlokat kiszámítják és tárolják, amikor a kifejezést elemzik , tehát akkor érvényesek, amikor find
elindul.
Ez azt jelenti, hogy minden ilyen idő-összehasonlítás ugyanazt az időreferenciát használja az összes kiértékelt fájlra, amikor find
elemezte a parancssort.
Válasz
A GNU keresését feltételezve ez könnyen tesztelhető:
% 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 %
Tehát annak ellenére, hogy a b
-et utoljára legalább 4 perccel módosították find
sleep 120
a a
fájlhoz, még mindig egyezett.
Mivel -mmin
nem “t POSIX, ez a megvalósításon múlik, de elvárnám a fentiekben látható viselkedést.
Megjegyzések
- FW Az IW, a (FreeBSD-alapú?)
find
a Mac gépemen mindkét fájlt afind . -mmin 1 -exec sleep 120 \; -print
Válasz
Próbálja ki a következő parancsot egymás után két terminálon
1. terminál:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
2. terminál:
touch -d " 0 seconds ago" /path/to/some/file
az eredményt
A parancs kezdési idejét a keresési eredménnyel látom el. megmutatja, hogy find
képes keresni azokat a fájlokat, amelyeket a parancs kezdési ideje után módosítottak.