Pregunta

Con este conjunto de comandos, ¿cuáles son los {} y \; caracteres para?

find . -name '*.clj' -exec grep -r resources {} \;
¿Fue útil?

Solución

Ver man find . (en particular, la parte sobre -exec )

Cuando se usa -exec para ejecutar un comando en cada uno de los archivos encontrados, el {} se reemplaza con el nombre de cada archivo encontrado, y el comando finaliza por \;

En su ejemplo, todos los archivos encontrados en el directorio actual (. ), que coincidan con el nombre * .clj tendrán el comando grep -r resources ejecutar en ellos (para encontrar la cadena resources si existe en cada uno de esos archivos).

En realidad es algo redundante, ya que -r es para buscar recursivamente subdirectorios, y eso es lo que find ya está haciendo.

Otros consejos

En find, el parámetro -exec toma el resto de los parámetros hasta el; (punto y coma) que se debe escapar, de ahí el \ ;. Dentro de este lapso, {} se reemplaza con el nombre del archivo que se está inspeccionando.

Considere este comando alternativo que me resulta más fácil de entender:

find . -name *.clj | xargs grep -r resources 

La cadena de caracteres " {} " será reemplazado por el archivo actual que se está procesando. El punto y coma escapado termina el argumento del comando para la opción -exec.

La cadena {} en find se reemplaza por la ruta del archivo actual.

El punto y coma se usa para terminar el comando de shell invocado por la utilidad find .

Debe ser escapado o citado, por lo que no será interpretado por el shell, porque ; es uno de los caracteres especiales utilizados por el shell (operadores de lista).

Consulte también: ¿Por qué se requieren la barra diagonal inversa y el punto y coma con la opción -exec del comando find?

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