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?
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" rm
executa rm line
uma vez para cada line
canal direcionado a ele.
Onde eu estou errado?
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á um pouco desligada. Por exemplo, *
significa quaisquer ocorrências ...
em uma expressão regular, de modo A*
partidas A
, AA
etc. e mesmo uma cadeia vazia.
Para mais informações, visite Regular-Expressions.info .
-d"\n
interruptor corrige o problema de espaços.grep -P
(regex Perl).grep -E
pode funcionar neste caso.-I
comxargs
e 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ê poderm
o que não quer.Ou usando
find
:Esta solução irá lidar com nomes de arquivos estranhos .
fonte
-type f
xargs
abordagem comrm -f
.Consulte a seção de expansão de nome de arquivo da página de manual do bash:
fonte
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:
Então, se estiver correto, use:
Isso é 200 vezes melhor, porque se você trabalha com Unix, é importante saber como usar o grep. É muito poderoso se você souber usá-lo.
fonte
Isso funciona no meu mac:
rm $(ls | grep -e '^A*[0..9]2$')
fonte
find
O comando funciona com regexes também.Verifique quais arquivos serão excluídos
Deletar arquivos
fonte