Como remover todos os arquivos começando com uma determinada string no Linux

36

Preciso encontrar todos os arquivos começando com o nome NAMEem uma árvore de diretórios e remover todos esses arquivos usando um comando shell.

Achini Pumika
fonte

Respostas:

1

para excluir todos os arquivos cujo nome tem nome --- você pode usar

find -name . 'name*' -exec rm {} \;
Comunidade
fonte
11
Você também pode adicionar -f como um argumento 'rm' para não ser solicitado "Tem certeza de que deseja remover o arquivo X?"
UtahJarhead
Qual versão greppossui um -execswitch?
Ben Graham #
Por que esse comentário tem votos negativos?
Ultrasonic54321
64

Exclua todos os arquivos no diretório atual e seus subdiretórios onde o nome do arquivo começa com "foo":

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

NB: use com cuidado - faça o backup primeiro - também faça um teste a seco primeiro, por exemplo

$ find . -type f -name foo\*

apenas informará os nomes dos arquivos que seriam excluídos.

Paul R
fonte
5
Eu tive que excluir mais arquivos 2 milhões e correr em problemas, find . -type f -name foo\* -deletefez o truque
Linas
25

Eu tentei dessa maneira, está funcionando para mim, tente abaixo do comando.

rm -rf Example*

aqui "Exemplo" é um texto comum a todos os arquivos.

Dinesh Bhojvani
fonte
4
Não sei por que essa não é a resposta mais votada ...
DanTheMan
@DanTheMan É porque é ~ 4 anos mais novo que as outras respostas. Esta é definitivamente a resposta mais simples.
joshuakcockrell 17/07
10

Você pode usar find:

find . -name "name*" -exec rm {} \;
PP
fonte
Também em vez de especificar '.' você pode especificar um caminho absoluto.
UtahJarhead
3

Com a globstaropção (ativar com shopt -s globstar):

rm -f **/NAME*

**/Expande para ./, */, */*/, */*/*/etc. Se você tem um diretório de nome começando com NAME, o comando se queixam de que rmnão é possível remover diretórios, mas isso é tudo.

Observe que isso pode ter limitações de comprimento de linha de comando se o glob corresponder a muitos arquivos.

Como alternativa, com o mínimo de invocações rmpossível, mas não sujeito a nenhuma limitação de comprimento de linha de comando:

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

(Observe o em +vez de \;fechar a -execinstrução.)

Benjamin W.
fonte
2

find . -name 'foo'* -type f -delete parece ser a resposta mais simples.

Você pode executar isso sem o -deletesinalizador antes para ver quais arquivos serão excluídos.

Yehuda Schwartz
fonte
-2

Procure o número "Inode" do arquivo / pasta e exclua usando o número do inode. Abaixo está um exemplo:

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

find . -inum 3407873 -exec rm -rf {} \;
Diwa
fonte
Esta é uma boa resposta - para uma pergunta diferente . Não é uma resposta para esta pergunta.
Scott