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

JD Isaacks
fonte
Dê uma olhada em superuser.com/a/699287/92334
Lu55 22/10

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.

Oli
fonte
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 {} \;
user2038042
fonte
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*
Taras Vaskiv
fonte