Dicas de shell: find

Um dos comandos mais úteis no gerenciamento de arquivos no terminal do Linux[bb] é 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[bb].
  • -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[bb] 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.

Publicado por

Elcio

Elcio é sócio fundador da Visie Padrões Web. Pioneiro no uso e divulgação dos padrões do W3C no Brasil, Elcio já treinou equipes de dezenas de empresas como Globo.com, Terra, Petrobras, iG e Locaweb. Além disso, tem dirigido as equipes da Visie no desenvolvimento de projetos web para marcas como Brastemp, Itaú Unibanco, Johnson & Johnson e Rede Globo.

10 comentários em “Dicas de shell: find”

  1. 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.

  2. 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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *