Cómo encontrar archivos que no contienen su propio nombre de archivo

Cómo encontrar archivos que no contienen su propio nombre de archivo

Al utilizar plantillas para generar archivos, es importante incluir el nombre de la plantilla dentro de la plantilla. Al leer un archivo generado, le ayuda a encontrar la plantilla utilizada para generarlo.

Quiero buscar todas las plantillas en un directorio que no contengan su propio nombre de archivo, imprimir las que encuentre y salir con un código distinto de cero si se encuentra alguna.

Hasta ahora, esto es lo que se me ocurrió.

find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;

Esto encuentra e imprime con éxito los archivos, pero sale con un código de salida 0, se encuentre o no algún archivo. ¿Cómo puedo encontrar los archivos relevantes y salir con un código distinto de cero cuando se encuentre alguno?

Respuesta1

¿Cómo puedo encontrar los archivos relevantes y salir con un código distinto de cero cuando se encuentre alguno?

Canalice el resultado a grep ''. La herramienta no alterará el flujo de texto, pero generará un estado de salida 0dependiendo 1de si alguna línea lo atraviesa o no.

Sé que lo quieres al revés. Si yo fuera usted, me adaptaría al comportamiento de grep. Mi razonamiento es: desea conocer archivos que cumplan con sus criterios; el comando los encuentra, por lo quetiene éxitopara encontrar si hay al menos un archivo.

Sin embargo, si insistes en el comportamiento opuesto, simplementenegar el estado de salida. Ejemplo:

! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''

Tenga en cuenta que he depurado su shinvocación dentro find. Su enfoque original sería contraproducente si {}se expandiera a ./a;rm -rf ~;.xyz(es un nombre de archivo válido en muchos sistemas de archivos Linux).

Respuesta2

Tal vez algo así grep .... && <do if found> || <do if not found>funcione

Respuesta3

for f in *.xyz; do
    grep -q $f $f || echo "$f does not contain itself"
done

Le dará la lista de archivos que está buscando, aunque todavía devuelve un cero (porque el eco tiene éxito).

información relacionada