Comando simple de Unix, ¿cuál es el {} y \; para
Pregunta
Con este conjunto de comandos, ¿cuáles son los {} y \; caracteres para?
find . -name '*.clj' -exec grep -r resources {} \;
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?