Excluir arquivos com expressão regular

27

Eu tentei apagar arquivos que começam com A e termina com 2 números, mas não faz nada.
O que eu tentei:

rm ^A*[0..9]2$

Onde estou errado?

    
por gdoron 22.02.2012 / 19:07

4 respostas

38

Você pode usar o seguinte comando para excluir todos os arquivos correspondentes aos seus critérios:

ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm

Como funciona:

  1. ls lista todos os arquivos (um por linha, pois o resultado é canalizado).

  2. grep -P "^A.*[0-9]{2}$" filtra a lista de arquivos e deixa apenas aqueles que correspondem à expressão regular ^A.*[0-9]{2}$

    • .* indica qualquer número de ocorrências de . , em que . é um curinga que corresponde a qualquer caractere.

    • [0-9]{2} indica exatamente duas ocorrências de [0-9] , ou seja, qualquer dígito.

  3. xargs -d"\n" rm executa rm line uma vez para cada line que é canalizado para ele.

Where am I wrong?

Para iniciantes, rm não aceita uma expressão regular como argumento. Além do curinga * , todos os outros caracteres são tratados literalmente.

Além disso, sua expressão regular está ligeiramente desativada. Por exemplo, * significa quaisquer ocorrências de ... em uma expressão regular, então A* corresponde a A , AA , etc. e até mesmo uma string vazia.

Para mais informações, visite Regular-Expressions.info .

    
por 22.02.2012 / 19:19
35

Ou usando find :

find your-directory/ -name 'A*[0-9][0-9]' -delete

Esta solução irá lidar com nomes de arquivos estranhos .

    
por 22.02.2012 / 20:01
8

Veja a seção expansão de nome de arquivo da página man bash:

rm A*[0-9][0-9]
    
por 22.02.2012 / 20:46
1

A solução com regexp é 200 vezes melhor, mesmo com isso você pode ver qual arquivo será deletado antes de usar o comando, cortando o pipe final:

ls | grep -P "^A.*[0-9]{2}$"

Então, se estiver correto, use:

ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm

Isso é 200 vezes melhor porque, se você trabalha com o Unix, é importante saber como usar o grep. É muito poderoso se você souber usá-lo.

    
por 10.11.2016 / 20:25

Tags