Tentei excluir arquivos que começam com A e terminam com 2 números, mas isso não faz nada.
O que eu tentei:
rm ^A*[0..9]2$
Onde eu estou errado?
Tentei excluir arquivos que começam com A e terminam com 2 números, mas isso não faz nada.
O que eu tentei:
rm ^A*[0..9]2$
Onde eu estou errado?
Respostas:
Você pode usar o seguinte comando para excluir todos os arquivos que correspondem aos seus critérios:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Como funciona:
ls lista todos os arquivos (um por linha, pois o resultado é canalizado).
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 corresponde a qualquer caractere.
[0-9]{2}indica exatamente duas ocorrências de [0-9], ou seja, qualquer dígito.
xargs -d"\n" rmexecuta rm lineuma vez para cada linecanal direcionado a ele.
Onde eu estou errado?
Para iniciantes, rmnã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á um pouco desligada. Por exemplo, *significa quaisquer ocorrências ...em uma expressão regular, de modo A*partidas A, AAetc. e mesmo uma cadeia vazia.
Para mais informações, visite Regular-Expressions.info .
-d"\ninterruptor corrige o problema de espaços.
grep -P(regex Perl). grep -Epode funcionar neste caso.
-Icom xargse sempre testar com comandos não-letais primeiro:xargs -d"\n" -I {} echo "{}"
ls? Veja esta pergunta que aponta para este artigo . Por causa das armadilhas, você pode rmo que não quer.
Ou usando find:
find your-directory/ -name 'A*[0-9][0-9]' -delete
Esta solução irá lidar com nomes de arquivos estranhos .
-type f
xargsabordagem com rm -f.
Consulte a seção de expansão de nome de arquivo da página de manual do bash:
rm A*[0-9][0-9]
A solução com regexp é 200 vezes melhor, mesmo com isso você pode ver qual arquivo será excluído antes de usar o comando, cortando o tubo 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 Unix, é importante saber como usar o grep. É muito poderoso se você souber usá-lo.
find O comando funciona com regexes também.
Verifique quais arquivos serão excluídos
find . -regex '^A.*[0-9]{2}$'
Deletar arquivos
find . -regex '^A.*[0-9]{2}$' -delete