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.

Respostas:


1

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

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

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.


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.


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 {} \;

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.)


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.


-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 {} \;

Esta é uma boa resposta - para uma pergunta diferente . Não é uma resposta para esta pergunta.
Scott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.