Como removo todos os arquivos que correspondem a um padrão?


76

Quando eu reverto no Mercurial, ele deixa vários .origarquivos. Eu gostaria de poder executar um comando para remover todos eles.

Eu encontrei algumas fontes que dizem para executar:

rm **/*.orig

Mas isso me dá a mensagem:

rm: não é possível remover `* / .orig ': esse arquivo ou diretório não existe

Eu também tentei:

  • rm -rv *.orig

  • rm -R *\.orig


Respostas:


149

Use o findcomando (com cuidado!)

find . -name '*.orig' #-delete

Eu comentei o comando delete, mas quando estiver satisfeito com o que ele corresponde, basta remover o #da linha e ele deve excluir todos esses arquivos.


Isso funciona recursivamente?
Frank Barcenas

2
@FrankBarcenas Yeah - find faz tudo de forma recursiva. Se você quiser limitar como isso funciona, você pode brincar com os argumentos -maxdepthou -mindepth.
Oli

6
Definitivamente deixe o -deleteno final das bandeiras. find . -delete -name '*.orig'irá ignorar o filtro e sobrecarregar todo o diretório.
Michael

1
@ Michael, sim. Eu já resolvi o problema comgit clean -fdx
kyb

1
@kamal Eu provavelmente ainda usaria find, mas com seus -regexou -iregexpredicados. Às vezes, pode ser difícil analisar nomes de arquivos (quando você os exibe por aí).
Oli

6

"find" possui algumas técnicas muito avançadas para pesquisar em todos os diretórios ou arquivos rm atuais ou atuais.

find ./ -name ".orig" -exec rm -rf {} \;

3
Qual é o benefício de usar -delete?
Muru

@ muru Suponho que você receba um prompt para cada arquivo se você remover -rf.
Peter

@ Peter não necessariamente. Mesmo assim, então? A resposta usa -rfe findtem -ok.
muru

@muru parece -delete não remove as pastas
Andrii Karaivanskyi

@AndriiKaraivanskyi, a menos que a exclusão falhe, ocorre.
muru 31/07

1

Eu removi todos os arquivos que começam com .nfs000000000 como este

rm .nfs000000000*
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.