Ich habe die Manpage und andere Referenzen gelesen, bin aber immer noch verwirrt über das Verhalten von find with -print0
option.
-print0 This primary always evaluates to true. It prints the pathname of
the current file to standard output, followed by an ASCII NUL
character (character code 0).
Erster Befehl:
$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null
/some/path//asdf199Intro-5kqlw.jpeg
/some/path/199intro-2jjaj.JPEG
/some/path/199intro-3.jpg
/some/path/wuer199intro-4.JPG
/some/path/xbzf199INTRO-1.jpg
Zweiter Befehl:
$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null -print0
/some/path/136intro-3.jpg/some/path/wuer136intro-4.JPG/some/path/xbzf136INTRO-1.jpg
Ich kann sehen, dass die Dateinamen des zweiten Befehls durch Nullzeichen getrennt sind, aber warum erhalte ich 3 Ausgaben im Gegensatz zu 5 oben?
Antworten:
Dein erstes Beispiel
ist nicht gleichbedeutend mit
Es ist äquivalent zu
Wenn Ihr Ausdruck eine andere Aktion als enthält
-purge
, wird der implizite Druck nicht mehr hinzugefügt. Sie wollenDer Grund, warum Sie nur 3 Dateinamen erhalten, ist, dass diese mit Ihrer zweiten Bedingung übereinstimmen (derjenigen, die eine Aktion hat). Was Sie eingegeben haben, bedeutet wirklich
Was hoffentlich klar macht, warum nur 1 Seite etwas druckt.
quelle
find /some/path -iregex '.*intro.*\.jpe?g'
Suchausdruck vereinfachen mit: ... und da es nur noch einen Ausdruck gibt, wird das von cjm hervorgehobene Problem vermieden.