Como excluir arquivos na linha de comando com expressões regulares?


17

Vamos dizer que eu tenho 20 arquivos chamados FOOXX, onde XX é o número do arquivo, por exemplo, 01, 02 etc.

No momento, se eu quiser apagar todos os arquivos menores que o número 10, isso é fácil e eu uso apenas um caractere curinga, por exemplo rm FOO0 *

No entanto, se eu quiser excluir arquivos específicos em um intervalo, por exemplo, 13-15, isso se torna mais difícil.

rm FPP [13-15] não funciona e me pergunta se desejo excluir todos os arquivos. O Likewse rm FOO1 [3-5] deseja deletar todos os arquivos que começam com FOO1

Então, qual é a melhor maneira de excluir intervalos de arquivos como este?

Eu tentei com bash e zsh, e eu não acho que eles diferem tanto para uma tarefa tão básica?


"... rm FOO1 [3-5] deseja deletar todos os arquivos que começam com FOO1" Isto não faz sentido, e certamente não é o caso aqui.
Ignacio Vazquez-Abrams

@Ignacio yeah- Eu gostaria de ver que o conjunto de caracteres tem essa ordem de agrupamento!
kmarsh

Respostas:



12

Para futuros leitores, o find comando também pode excluir arquivos. Eu resolvi isso para um problema semelhante:

find . -type f -regex '...' -delete

mas a resposta escolhida é a resposta mais simples para essa pergunta.


A resposta escolhida é boa apenas para arquivos que seguem uma convenção de nomenclatura. Graças à sua resposta, eu poderia excluir todos os arquivos de objeto em um diretório. (no meu caso eu só fui com find . -name "*.o" -delete e funcionou perfeitamente)
John Hamilton

6

ls | grep regex | xargs rm


6
Você deveria usar find -regex ... -print0 | xargs -0 ... para isso, caso contrário, ele falhará para nomes de arquivos com espaços.
Dennis Williamson

1
Claro, se você vai usar find então você pode também apenas usar -exec.
Ignacio Vazquez-Abrams

No meu caso, os arquivos tinham espaços e, ao alterar o delimitador, a questão dos espaços é corrigida: ls | grep regex | xargs --delimiter = '\ n' rm
Anake


@eviloup, +1 para adicionar esse aviso, mas, quem insere uma nova linha em um nome de arquivo?
Iulian Onofrei
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.