He leído la página de manual y otras referencias, pero todavía estoy confundido por el comportamiento de buscar con -print0
opción.
-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).
Primer comando:
$ 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
Segundo comando:
$ 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
Puedo ver que los nombres de archivo del segundo comando están separados por caracteres nulos, pero ¿por qué obtengo 3 resultados en lugar de los 5 anteriores?
Respuestas:
Tu primer ejemplo
no es equivalente a
Es equivalente a
Cuando su expresión contiene cualquier otra acción que no sea
-purge
, la impresión implícita ya no se agrega. Usted quiereLa razón por la que solo obtienes 3 nombres de archivo es que esos son los que coinciden con tu segunda condición (la que tiene una acción). Lo que escribiste realmente significa
Lo que con suerte deja en claro por qué solo 1 lado imprime algo.
fuente
find /some/path -iregex '.*intro.*\.jpe?g'
... y dado que ahora solo hay una expresión, evitará el problema resaltado por cjm.