Um dos comandos mais úteis no gerenciamento de arquivos no terminal do Linux é o comando find. Ele permite realizar e automatizar tarefas que na interface gráfica levariam muito tempo. Executar o comando find sem argumentos faz com que ele liste todos os arquivos do diretório atual e de seus subdiretórios.
Para procurar dentro de um diretório específico, informe o caminho ao find:
find caminho/onde/procurar
O find recebe uma série de parâmetros úteis. É bom lembrar que o diretório de procura precisa ser sempre o primeiro parâmetro. Assim, para procurar por todos os arquivos de extensão bak no diretório atual, faça:
find -name "*.bak"
E para procurar dentro de um diretório específico, use:
find caminho/onde/procurar -name "*.bak"
O find permite a você construir uma série de expressões de procura e operação com os arquivos, algumas bastante complicadas (e poderosas). Vamos dar uma olhada em algumas bem simples. Para apagar os arquivos, use -delete. Então, para apagar todos os arquivos bak no diretório atual e em seus subdiretórios, faça:
find -name "*.bak" -delete
Você também pode passar parâmetros numéricos, que funcionam segundo a seguinte lógica:
- Um número sozinho significa exatamente aquele número, por exemplo:
3 - Com um sinal de mais, significa maior do que aquele número:
+3 - Com um sinal de menos, significa menor do que aquele número:
-3
Para ver uma lista dos arquivos modificados há menos de três dias, faça:
find -mtime -3
Para ver os que foram modificados a mais de três dias, inverta o sinal:
find -mtime +3
As expressões mais comuns para uso com tempo são:
- -amin - quando o arquivo foi acessado, em minutos.
- -atime - quando o arquivo foi acessado, em dias.
- -cmin - quando o arquivo foi criado, em minutos.
- -ctime - quando o arquivo foi criado, em dias.
- -mmin - quando o arquivo foi modificado, em minutos.
- -mtime - quando o arquivo foi modificado, em dias.
Outras expressões bastante úteis são:
- -regex: funciona como -name, mas recebe uma expressão regular
.
- -size: filtra pelo tamanho do arquivo. É um número seguido de uma letra. As mais comuns são: c - bytes, k - kilobytes, M - megabytes e G - gigabytes.
Por fim, você também pode mandar o find executar operações nos arquivos. Foi o que fizemos no início, quando usamos -delete para apagar arquivos. Dentre as operações, minha predileta é a -exec.
Quando você coloca -exec numa linha de comando do find, tudo o que vem depois até o próximo ";" é entendido pelo find como um comando, que ele vai executar para cada um dos arquivos encontrados. É obrigatório colocar ";" para terminar o comando, se você se esquecer vai receber o seguinte erro:
$ find -exec ls
find: faltando argumento para `-exec'
Onde você quiser passar para seu comando o nome do arquivo, use {}. Por exemplo, para tirar a permissões de execução de todos os arquivos TXT na busca, você pode fazer:
find -name "*.txt" -exec chmod -x {} ";"
Isso vai executar, para cada um dos arquivos encontrados:
chmod -x ARQUIVO ;
O último truque que eu gostaria que você guardasse na manga é que você pode combinar o find com o excelente comando grep. Grep faz buscas dentro de um arquivo. Com o parâmetro -l o grep apenas lista o nome do arquivo se a expressão regular de busca for encontrada. Então, para encontrar todos os arquivos python que contém o texto "urllib" você pode fazer:
find -name *.py -exec grep -l urllib {} ";"
O find, é claro, tem muito mais recursos e opções. Se quiser mesmo se aprofundar, man find.



08/01/2008 at 12:09
Parabéns pelo artigo Élcio! Realmente estas dicas foram muito úteis.
08/01/2008 at 12:17
Como sempre assunto interessante! Gosto muito do seu blog.
Abração do Ved
08/01/2008 at 23:58
Demorou mais chegou mais uma dica quente….
10/01/2008 at 18:43
Parabéns, excelente post
11/01/2008 at 10:26
Cara o find é fantástico mesmo, segue minha dica.
Sabe quando você precisa corrigir as permissões de arquivos e diretórios rápidamente, deixando-as seguras, corretas, sem permissão de execucao em arquivos comuns, o find pode ajudar você a não quer fazer isso manualmente.
corrigindo permissoes de arquivos comuns
entre no diretório que contém arquivos
find . -type f -exec chmod 664 {} \;
aqui setamos a permissão 664 ou u=rw-x,g=rw-x,o=-rwx
usuário dono pode ler e escrever no arquivo, grupo dono pode ler e escrever, outros não podem nada.
corrigindo permissões de diretórios
entre no diretório
find . -type d -exec chmod 755 {} \;
usuário dono pode ler, escrever e executa (entrar no diretório), grupo e outros podem apenas ler e entrar no diretório.
isso ajuda muito quando descompactamos aqueles arquivos que vem com permissões erradas, tudo 777, evita transtornos e problemas de segurança e privacidade.
[]'s
Guto
http://gutocarvalho.net
12/01/2008 at 16:54
Uma complemento apenas, ao seu ótimo post:
Usar o comando xargs combindado com o find ao invés da opção -exec
é mais produtivo:
Uma explicação bem convincente você encontra aqui:
http://www.dicas-l.com.br/dicas-l/20050226.php
valeu!
12/01/2008 at 23:44
Como sempre ensinano aos outros pouco a pouco, assim vamos evangelizando quem tem medo de Linux. Foi por causa de duas pessoas que hoje me sinto mais à vontade no Linux, e uma delas é você.
Parabéns pelo artigo e continue assim, dando-nos dicas que nos ajudam – e muito, no dia-a-dia.
14/01/2008 at 14:48
[…] encontrei o recode, que está nos respositórios do Ubuntu 7.10, e uni essa solução com a dica do fechaTag de uso do comando find com o parâmetro -exec, pois minha monografia está dividida em vários […]