![¿Por qué el comportamiento de find(1) difiere cuando se agrega explícitamente -print?](https://rvso.com/image/1457450/%C2%BFPor%20qu%C3%A9%20el%20comportamiento%20de%20find(1)%20difiere%20cuando%20se%20agrega%20expl%C3%ADcitamente%20-print%3F.png)
La página de manual para find(1)
dice:
Si la expresión no contiene más acciones que
-prune
,
Sin embargo, parece haber una diferencia entre estas dos expresiones:
$ find . -path '*fo*' -prune -o -type f -print
./bar/xzyzzy
$ find . -path '*fo*' -prune -o -type f
./foo
./bar/xzyzzy
¿Por qué se ./foo
incluye en la salida de este último?
Creé la estructura de árbol de directorios de ejemplo para lo anterior con:
$ cd $(mktemp -d)
$ mkdir foo
$ mkdir bar
$ touch foo/quux
$ touch bar/xzyzzy
El resultado de find --version
para mí es:
find (GNU findutils) 4.4.2`
Respuesta1
Oh, creo que lo he resuelto por mi cuenta...
En el primer caso, -print
se realizasolocuando la primera condición ( -path '*fo*'
) no es verdadera debido al comportamiento de cortocircuito de -o
.
Sin embargo, en el segundo caso, lo implícito -print
se hace cuando elenteroLa expresión es verdadera; ese será el caso cuando -path '*fo*'
sea verdadera.o -type f
es verdad. En otras palabras, los dos comandos de mi pregunta equivalen a:
$ find . \( -path '*fo*' -prune \) -o \( -type f -print \)
./bar/xzyzzy
... y:
$ find . \( -path '*fo*' -prune -o -type f \) -print
./foo
./bar/xzyzzy
Creo que, de todos modos :)