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.
Parabéns! valeu
executando a busca e entregando ao grep via xargs fica mais rápido
find -name *.py | xargs grep -l urllib
a explicação detalhada pode ser lida aqui:
http://new.dicas-l.com.br/dicas-l/19970821.php
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.
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!
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
Parabéns, excelente post
Demorou mais chegou mais uma dica quente….
Como sempre assunto interessante! Gosto muito do seu blog.
Abração do Ved
Parabéns pelo artigo Élcio! Realmente estas dicas foram muito úteis.