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 (verman find
para más detalles) -
rm --
se asegura de eliminar realmente los archivos que comienzan con a-
lugar de tratarlos como parámetros pararm
. En caso de que haya un archivo llamado-rf
yfind . -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 {} /;