Cómo eliminar todos los archivos que comienzan con una cadena determinada en Linux


36

Necesito encontrar todos los archivos que comienzan con el nombre NAMEen un árbol de directorios y eliminar todos estos archivos con un comando de shell.

Respuestas:


1

para eliminar todos los archivos cuyo nombre tiene nombre --- puede usar

find -name . 'name*' -exec rm {} \;

1
También puede agregar -f como argumento 'rm' para que no se le pregunte "¿Está seguro de que desea eliminar el archivo X?"
UtahJarhead

¿Qué versión de greptiene un -execinterruptor?
Ben Graham el

¿Por qué este comentario tiene votos negativos?
Ultrasonic54321

64

Eliminar todos los archivos en el directorio actual y sus subdirectorios donde el nombre del archivo comienza con "foo":

$ find . -type f -name foo\* -exec rm {} \;

NB: use con precaución, haga una copia de seguridad primero, también haga una carrera en seco primero, por ejemplo

$ find . -type f -name foo\*

solo le dirá los nombres de los archivos que se eliminarán.


55
Tuve que eliminar más de 2 millones de archivos y me encontré con problemas, find . -type f -name foo\* -deletehice el truco
Linas

25

Lo he intentado de esta manera, funciona para mí, intente debajo del comando.

rm -rf Example*

aquí "Ejemplo" es texto que es común para todos los archivos.


44
No estoy seguro de por qué esta no es la respuesta más votada ...
DanTheMan

@DanTheMan Es porque es ~ 4 años más nuevo que las otras respuestas. Sin embargo, esta es definitivamente la respuesta más simple.
Joshuakcockrell

10

Puedes usar find:

find . -name "name*" -exec rm {} \;

También en lugar de especificar '.' Puede especificar una ruta absoluta.
UtahJarhead

3

Con la globstaropción (habilitar con shopt -s globstar):

rm -f **/NAME*

**/se expande a ./, */, */*/, */*/*/etc Si usted tiene un directorio de nombre que empieza con NAME, el comando se quejan de que rmno pueden eliminar directorios, pero eso es todo.

Tenga en cuenta que esto podría encontrarse con limitaciones en la longitud de la línea de comandos si el globo coincide con muchos archivos.

Alternativamente, con la menor cantidad de invocaciones rmposible, pero no sujeto a ninguna limitación de longitud de línea de comando:

find . -type f -name 'NAME*' -exec rm -f {} +

(Observe el en +lugar de \;cerrar la -execdeclaración).


2

find . -name 'foo'* -type f -delete Parece la respuesta más simple.

Puede ejecutar esto sin la -deletebandera antes para ver qué archivos se eliminarán.


-2

Busque el número "Inode" del archivo / carpeta y luego elimínelo usando el número de inodo. A continuación se muestra un ejemplo:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

Esta es una buena respuesta, a una pregunta diferente . No es una respuesta a esta pregunta.
Scott
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.