varios usar texto regulares recursivo por patrones fecha extension expresiones comando buscar archivos archivo grep find pipe rm

usar - grep varios patrones



Eliminar una lista de archivos con find y grep (8)

Esto encuentra un archivo con un patrón coincidente (* .xml) y agota su contenido para la cadena coincidente (exclude = "1") y elimina ese archivo si se encuentra una coincidencia.

find . -type f -name "*.xml" -exec grep exclude=/"1/" {} /; -exec rm {} /;

Quiero eliminar todos los archivos que tengan nombres que contengan una palabra específica, por ejemplo, "auto". Hasta ahora, se me ocurrió esto:

find|grep car

¿Cómo paso la salida a rm?


Me gusta usar

rm -rf $(find . | grep car)

Hace exactamente lo que pide, ejecutando lógicamente rm -rf en lo grep car devuelve grep car de la salida de find . que es una lista de cada archivo y carpeta recursivamente.


Para ver lo que va a eliminar primero, ya que rm -fr es como un comando peligroso:

find /path/to/file/ | grep car | xargs ls -lh

Luego, si los resultados son los que desea, ejecute el comando real eliminando ls -lh y sustitúyalo por rm -fr

find /path/to/file/ | grep car | xargs rm -fr


Puede usar ls y grep para encontrar sus archivos y rm -rf para eliminarlos.

rm -rf $(ls | grep car)

Pero esta no es una buena idea usar este comando si existe la posibilidad de directorios o archivos, no desea eliminarlos, ya que tiene nombres con el patrón de caracteres que está especificando con grep.


Realmente quieres usar find con -print0 y rm con -- :

find [dir] [options] -print0 | grep --null-data [pattern] | xargs -0 rm --

Un ejemplo concreto (eliminando todos los archivos debajo del directorio actual que contiene el auto en su nombre de archivo):

find . -print0 | grep --null-data car | xargs -0 rm --

¿Por qué es necesario esto?

  • -print0 , --null-data y -0 cambian el manejo de la entrada / salida de analizados como tokens separados por espacios en blanco para analizar como tokens separados por el carácter /0 . Esto permite el manejo de nombres de archivo inusuales (ver man find para más detalles)
  • rm -- se asegura de eliminar realmente los archivos que comienzan con a - lugar de tratarlos como parámetros para rm . En caso de que haya un archivo llamado -rf y find . -print0 | grep --null-data r | xargs -0 rm find . -print0 | grep --null-data r | xargs -0 rm find . -print0 | grep --null-data r | xargs -0 rm , el archivo -rf posiblemente no se eliminará, pero modificará el comportamiento de rm en los otros archivos.

Un poco de nigromancia, pero también puedes usar find, grep y xargs

find . -type f | grep -e "pattern1" -e "pattern2" | xargs rm -rf

^ Find necesitará algo de atención para hacer que funcione para sus necesidades potencialmente, como un archivo, mindepth, maxdepth y cualquier globo.


find . -name ''*car*'' -exec rm -f {} /;

o pase la salida de su tubería a xargs :

find | grep car | xargs rm -f

Tenga en cuenta que estas son herramientas muy contundentes y es probable que elimine los archivos que no pretendía eliminar. Ser advertido


find start_dir -iname /*car/* -exec rm -v {} /;