
Tengo una lista de archivos en un directorio y necesito eliminar todos los archivos que contengan un 0 o un 7. Siento que necesito usar grep pero no estoy muy seguro. ¿Algunas ideas?
Respuesta1
Lo que desea hacer es evaluar sus archivos de acuerdo con una prueba condicional específica y realizar una acción en cada archivo de acuerdo con el resultado de la prueba condicional. Este es el propósito exacto del find
comando.
Aquí hay un portátil (compatible con POSIX) comando para eliminar archivos normales que tienen un contenido que incluye un "0" o un "7":
find . -type f -exec grep -q '[07]' {} \; -exec rm {} +
Tenga en cuenta queesterecursivamentebusca en el directorio actual.
Si eso no es lo que desea, puede verificar si el -maxdepth
primario está disponible (en cuyo caso también puede usar el primario -delete
; POSIX no especifica ninguno de los dos):
find . -maxdepth 1 -type f -exec grep -q '[07]' {} \; -delete
O bien, puede aplicar las técnicas proporcionadas en:
Respuesta2
grep -l '[07]' DirToYourFiles/* | xargs rm -f
grep -l
significa listar solo nombres de archivos
[07]
significa 0 o 7
xargs
les convierte en una orden.
Eso supone que los nombres de los archivos no contienen espacios en blanco, caracteres de nueva línea, comillas simples, comillas dobles o barras invertidas. Con las utilidades GNU, puedes hacerlo más confiable con:
grep -lZ '[07]' DirToYourFiles/* | xargs -r0 rm -f