
¿Alguien tiene una idea sobre el resultado de este comando? He buscado mucho en Google al respecto pero no puedo encontrar nada útil.
find . -type f -exec grep -H PATH {} \;
gracias de antemano
Respuesta1
El comando
find . -type f -exec grep -H PATH {} \;
busca todos los archivos normales ( -type f
) en el directorio actual ( .
) o debajo, y para cada uno de estos archivos se ejecuta grep -H PATH {}
y {}
se reemplaza por la ruta completa del archivo relativa al directorio actual.
La -H
opción grep
no es estándar, pero se implementa a menudo y garantiza que cada línea coincidente tenga como prefijo el nombre de ruta del archivo en el que se encontró la línea. Puede cambiar el comando a grep PATH /dev/null {}
forzar grep
que siempre se muestre el nombre de ruta del archivo. que contiene las líneas coincidentes (el estándar grep
hace esto cuando se proporcionan al menos dos archivos en la línea de comando).
El patrón utilizado grep
es la cuerda PATH
.
Para resumir: el comando busca y genera todas las líneas de todos los archivos normales en el directorio actual o debajo, que mencionan la subcadena PATH
en cualquier lugar. Cada línea tiene como prefijo la ruta del archivo que contiene la línea.
Un fragmento del resultado que obtengo cuando ejecuto esto en mi directorio personal:
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_NM:FILEPATH=/usr/bin/nm
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_STRIP:FILEPATH=/usr/bin/strip
El comando podría hacerse más eficiente permitiendo que grep
se ejecute en tantos archivos como sea posible a la vez, en lotes, en lugar de una vez para cada archivo:
find . -type f -exec grep -F -e PATH /dev/null {} +
También me tomé la libertad de cambiar grep
ligeramente el comando aquí agregando -F
para que trate la cadena PATH
como uncadenaen lugar de como una expresión regular. La -e
opción solo se usa para indicar que el siguiente argumento es el patrón (útil si el patrón se cambia posteriormente a algo que pueda comenzar con un guión, por ejemplo).
Es el cambio de \;
a +
al final del -exec
argumento del predicado lo que hace que recopile los nombres de ruta encontrados en lotes en lugar de ejecutar la utilidad para todos y cada uno de ellos.