Pregunta

Esta parte " (-name * txt -o -name * html) " me confunde en el código:

find $HOME \( -name \*txt -o -name \*html \) -print0 | xargs -0 grep -li vpn

¿Alguien puede explicar los corchetes y '' -o ''? Es " -o " un comando o un parámetro? Sé que los corchetes se escapan por '' \ '' , pero ¿para qué sirven?

¿Fue útil?

Solución

Por defecto, las condiciones en la lista de argumentos de búsqueda son 'y' juntas. La opción -o significa 'o'.

Si escribiste:

find $HOME -name \*txt -o -name \*html -print0

entonces no hay ninguna acción de salida asociada con los nombres de archivo que terminan con 'txt', por lo que no se imprimirán. Al agrupar las opciones de nombre con paréntesis, obtiene los archivos 'html' y 'txt'.


Considere el ejemplo:

mkdir test-find
cd test-find
cp /dev/null file.txt
cp /dev/null file.html

Los comentarios a continuación tienen una luz lateral interesante sobre esto. Si el comando fue:

find . -name '*.txt' -o -name '*.html'

entonces, dado que no se especifica ninguna acción explícita para ninguna de las alternativas, la acción predeterminada -print (no -print0 !) se usa para ambas alternativas y se enumeran ambos archivos . Con una -print u otra acción explícita después de una de las alternativas (pero no la otra), entonces solo la alternativa con la acción surte efecto.

find . -name '*.txt' -print -o -name '*.html'

Esto también sugiere que podría tener diferentes acciones para las diferentes alternativas. También puede aplicar otras condiciones, como un tiempo de modificación:

find . \( -name '*.txt' -o -name '*.html' \) -mtime +5 -print0

find . \( -name '*.txt'  -mtime +5 -o -name '*.html' \) -print0

El primero imprime archivos txt o html de más de 5 días (por lo que no imprime nada para el directorio de ejemplo; los archivos tienen unos pocos segundos de antigüedad); el segundo imprime archivos txt de más de 5 días o archivos html de cualquier edad (así que solo file.html). Y así sucesivamente ...

Gracias a DevSolar por sus comentarios que llevaron a esta adición.

Otros consejos

El " -o " significa OR. Es decir, el nombre debe terminar en '' txt '' o "html". Los corchetes solo agrupan las dos condiciones juntas.

El (y) proporciona una forma de agrupar los parámetros de búsqueda para el comando find. El -o es un '' o '' operador.

Este comando de búsqueda buscará todos los archivos que terminen en " txt " o "html" y pasarlos como argumentos al comando grep.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top