De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 04 de junho de 2014
Quando usamos o comando rm
geralmente fornecemos os nomes dos arquivos
ou então usamos algum metacaractere para limitar a seleção. Raramente fazemos
o contrário, ou seja, apagar todos os arquivos com exceção de alguns deles.
Por exemplo, o comando "rm *.doc
irá apagar TODOS os arquivos que tenham
o sufixo ".doc
".
Podemos sofisticar um pouco mais o uso do comando "rm
", utilizando a
tabela abaixo:
?(lista-de-argumentos) |
Casa com zero ou uma ocorrência do texto fornecida |
*(lista-de-argumentos) |
Casa com zero ou mais ocorrências do texto fornecido |
+(lista-de-argumentos) |
Casa com uma ou mais ocorrências do texto fornecido |
@(lista-de-argumentos) |
Casa com um dos argumentos fornecidos |
!(lista-de-argumentos) |
Casa com tudo menos o argumento fornecido |
Podem ser espeficados vários argumentos entre parênteses, basta separá-los com o
caractere "|
" (pipe).
Exemplos
arquivo1.doc
:
$ rm !(arquivo1.doc)
O caractere "!
" funciona como uma negação da expressão em parenteses.
arquivo1.doc
" e "arquivo2.doc
":
$ rm !(arquivo1.doc|arquivo2.doc)
.zip
":
$ rm !(*.zip)
.iso
" e ".zip
":
$ rm !(*.zip|*.iso)
Para que esta funcionalidade funcione, é preciso que o recurso extglob
esteja ativo:
$ shopt extglob
extglob off
Para ativar:
$ shopt -s extglob
Por padrão, esta funcionalidade já vem ativada em grande parte das distribuições GNU/Linux.
Este recurso pode ser usado com qualquer comando:
mv !(*.txt) /tmp
Neste exemplo, todos os arquivos que NÃO possuam o sufixo ".txt
"
são movidos para o diretório "/tmp/
".