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.

Achini Pumika
fuente

Respuestas:

1

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

find -name . 'name*' -exec rm {} \;
Comunidad
fuente
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.

Paul R
fuente
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.

Dinesh Bhojvani
fuente
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 {} \;
PÁGINAS
fuente
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).

Benjamin W.
fuente
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.

Yehuda Schwartz
fuente
-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 {} \;
Diwa
fuente
Esta es una buena respuesta, a una pregunta diferente . No es una respuesta a esta pregunta.
Scott