quarta-feira, 7 de setembro de 2011

Removendo arquivos de vários diretórios com o comando find

Após baixar alguns arquivos, percebi que junto aos arquivos que eu queria, existiam arquivos de propaganda de extenção .URL do site de onde eu baixei, que se encontravam e vários diretórios.

Uma forma simples de apagar todos estes arquivos é com o comando find. Assim:
find -name \*URL -exec rm -i {} \;

A principio pode parecer um comando complicado, mas após a explicação você vai ver que é muito simples.

find -name \*URL 
Vai procurar de forma recursiva por todos os arquivos e diretórios que terminem com as letras URL.
Note que coloquei um escape no asterisco usando uma barra invertida (\). Isto serve para que o shell não interprete o *, deixando para o comando find interpretá-lo.

rm -i
O comando rm -i remove arquivos, após pedir confirmação. Se você não deseja ter que confirmar a exclusão de cada arquivo, substitua o argumento -i pelo argumento -f.

Agora basta falar sobre o argumento -exec do find.
O argumento -exec permite ao usuário que execute um comando para cada arquivo que "case" com as condições passadas para o find.
Sua sintaxe é a seguinte:
find <condições> -exec <comando [argumentos_adicionais_comando]> {} \;
Os colchetes ({}) servem para indicar para o find, aonde ele deve colocar no nome do arquivo na substituição do comando. O ponto e virgula (;) no final, serve para o find saber que o comando acabou. Ele também precisa de escape com \ pois queremos impedir que o bash interprete este ponto e virgula.
comando pode ser qualquer comando bash, e argumentos_adicionais_comando são argumentos que desejamos passar para este comando. No nosse exemplo, o comando é rm e temos apenas um argumento, que é -i.

Então traduzindo, o comando "find -name \*URL -exec rm -i {} \;" significa:
Encontre todos os arquivo que terminam com URL e para cada arquivo encontrado execute rm -i seguido de seu nome.


Nenhum comentário:

Postar um comentário