Qué conciso Qué comando puedo usar para encontrar todos los archivos que NO contienen una cadena de texto?
Intenté esto (usando -v para invertir los parámetros de grep) sin suerte:
find . -exec grep -v -l shared.php {} ;
Alguien dijo que esto funcionaría:
find . ! -exec grep -l shared.php {} ;
Pero parece que no funciona para mí.
Esta página tiene este ejemplo:
find ./logs -size +1c > t._tmp
while read filename
do
grep -q "Process Complete" $filename
if [ $? -ne 0 ] ; then
echo $filename
fi
done < t._tmp
rm -f t_tmp
Pero eso es engorroso y nada conciso.
pd:sé que grep -L *
hará esto, pero lo que realmente quiero saber es cómo puedo usar el comando de búsqueda en combinación con grep para excluir archivos.
pss:Además, no estoy seguro de cómo hacer que grep incluya subdirectorios con grep -L *
sintaxis, pero todavía quiero saber cómo usarlo con find
🙂
Respuesta aceptada:
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
O
find . -type f -exec grep -H -c 'shared.php' {} ; | grep 0$ | cut -d':' -f1
Aquí estamos calculando el número de líneas coincidentes (usando -c
) en un archivo si el recuento es 0, entonces es el archivo requerido, por lo que cortamos la primera columna, es decir, el nombre del archivo de la salida.