Valamit nem értek. Persze lehet, hogy csak nem veszek észre valami triviálisat, ha erről lenne szó, írjátok meg! Köszi.
Feladat: ki akartam válogatni a mentéseimből a videókat, amik egy adott dátum után készültek.
Több iteráción keresztül eljutottam oda, hogy azonosítottam azokat a fájl kiterjesztéseket, amik nem képek, nem egyebek, hanem vagy videó, vagy nem ismerem és akár videó is lehet.
Megszámoltam, hány ilyen van (1):
$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 | wc -l
834
OK, gondoltam legyűjtöm ezeket egy helyre, hogy ne kelljen mindig a finddal vacakolni (2):
$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 -print -exec ln -s '{}' . \;
A könyvtárban viszont ennél jóval kevesebb fájl lett:
$ ls -1 | wc -l
348
Na, gondoltam, bizonyára voltak duplikációk, nem tudta ugyanazt a symlinket használni többször azonos nevű fájlokhoz, stb.
Jó, gondoltam, lementem a fájl listát, basename | sort | uniq és meglátjuk, hogy jó eredmény jön-e ki, vagy van olyan, ami valami más miatt maradt le. (3)
$ find -L /mnt/nas/backup/Pictures/ -iname *.3gp -o -iname *.amr -o -iname *.m4a -o -iname *.mov -o -iname *.avi -o -iname *.mp4 -type f -newermt 2013-11-15 -print > filelistln-s.txt
$ wc -l filelistln-s.txt
348 filelistln-s.txt
Izé. Itt elakadtam.
Ha jól látom, a két parancs (1), ami 834-et ad, és (2) meg (3), ami 348-at ad, ugyanazokat a válogatási paramétereket adja a findnak, csak a -print az eltérés.
Nézzük, mit mond a man find:
If no expression is given, the expression -print is used
...
-print True; print the full file name on the standard output, followed by a newline.
Szóval elméletileg a -print megadása az utasítás végén az égvilágon semmit nem változtat, ha nem adom meg, akkor is ugyanúgy végrehajtja.
(a problémámat a két különböző fájl lista összehasonlításával tudom egyébként kezelni, szóval ez nem akadályoz, csak elgondolkoztatott).
Viszont tovább nézve a fájlok különbségét, feltűnt, hogy a 834 darabosban számos olyan fájl van, ami a megadott dátum előtti. A 348-asban nem találtam egyet se (szemmel átfutva).
Nem tudom még, hogy ez-e az egyetlen különbség, de ez megint felvet egy kérdést:
Ha a két esetben a find-nak átadott paraméterlista ugyanaz, akkor miért lehet eltérés az eredményben?
Azt írja a man, hogy operátorok (pl. -o és -a) kapcsolják össze a kifejezés elemeit, és ha hiányzik az operátor, akkor logikai és kapcsolatot feltételez.
Ez alapján a -newerXY elem és kapcsolatban van a többivel, szóval nem értem, hogy találhatott a find olyasmit, ami korábbi.
És máskor meg ügyesen kihagyja ezeket.