Estoy usando GNU find
.
He simplificado mi problema a esta sesión de shell:
$ mkdir t
$ cd t
$ touch a
$ ln -s a b
$ find -type l
./b
$ find -type l -o -type f
./a
./b
$ find -type l -print
./b
$ find -type l -o -type f -print
./a
Quizás sea el hecho de que tengo mucho sueño, pero 2 cosas no tienen sentido para mí:
- ¿No lo es
true OR false == true
? ¿Cómo es que agregar-o -type f
hacefind
que deje de coincidir./b
, a pesar de-type l
coincidir? - La página del manual dice que esa
-print
es la expresión predeterminada, entonces, ¿cómo es posible que se imprima un archivo cuando no se menciona, pero se omite cuando sí se menciona?
Esto también sucede cuando uso -printf
(lo que realmente necesito); Me imagino que otras expresiones también se ven afectadas.
Respuesta1
En
find -type l -o -type f -print
Ha especificado una acción, por lo que el valor predeterminado ya no se aplica. Pero -printf
aquí está obligado a hacerlo -type f
porque "y" tiene mayor precedencia que "o"; Puedes pensar en esto como equivalente a
find \( -type l \) -o \( -type f -print \)
Para procesar enlaces y archivos de la misma manera, es necesario agrupar las pruebas:
find \( -type l -o -type f \) -print