J'ai lu la page de manuel et d'autres références, mais je suis toujours confus par le comportement de find avec -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).
Première commande:
$ 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
Deuxième commande:
$ 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
Je peux voir que les noms de fichiers de la deuxième commande sont séparés par des caractères nuls, mais pourquoi ai-je 3 sorties au lieu de 5 ci-dessus?
Réponses:
Votre premier exemple
n'est pas équivalent à
C'est équivalent à
Lorsque votre expression contient une action autre que
-purge
, l'impression implicite n'est plus ajoutée. Tu veuxLa raison pour laquelle vous n'obtenez que 3 noms de fichiers est que ceux-ci correspondent à votre deuxième condition (celle qui a une action). Ce que vous avez tapé signifie vraiment
Ce qui, nous l'espérons, montre clairement pourquoi un seul côté imprime quoi que ce soit.
la source
find /some/path -iregex '.*intro.*\.jpe?g'
... et comme il n'y a plus qu'une seule expression, cela évitera le problème mis en évidence par cjm.