A lenda do arquivo perdido. Domine a busca de arquivos no Linux com o comando find!

A lenda do arquivo perdido. Domine a busca de arquivos no Linux com o comando find!

Você já se perguntou como os especialistas em Linux conseguem encontrar arquivos em um emaranhado de diretórios? Saiba que há um comando mágico chamado find que lhes concede esse poder. Hoje, vamos desvendar a lenda do arquivo perdido e dominar a arte de buscar arquivos no Linux com o comando find. Prepare-se para desvendar os segredos do sistema de arquivos e se tornar um mestre na localização de arquivos.

Então, vamos explorar o que é o comando find, para que serve, como usá-lo e por que você deve usá-lo.

O que é o comando find?

O comando find é uma ferramenta poderosa disponível em sistemas operacionais baseados em Unix, como o Linux. Ele é projetado para realizar buscas complexas e detalhadas em uma estrutura de diretórios. O comando find permite localizar arquivos e diretórios com base em critérios específicos, como nome do arquivo, tipo, tamanho, data de modificação e permissões. É uma ferramenta extremamente útil para gerenciar arquivos e pode ajudá-lo a economizar muito tempo no seu dia a dia.

Para que serve o comando find?

O comando find é usado principalmente para localizar arquivos e diretórios, isso pode ser útil para gerenciar e organizar arquivos em seu sistema, especialmente se você tiver um grande número de arquivos e diretórios.

Com o comando find, é possível criar consultas sofisticadas para buscar arquivos com precisão, permitindo a realização de ações como listagem, exclusão, cópia ou execução de comandos nos arquivos encontrados. Sua flexibilidade e recursos avançados tornam-no uma ferramenta indispensável para administradores de sistemas, desenvolvedores e usuários avançados que desejam navegar e gerenciar eficientemente o seu sistema de arquivos.

Como usar o comando find?

O find é um comando que pode ser usado de várias maneiras, você pode seguir a seguinte sintaxe básica:

find [diretório] [opções] [expressão]
[diretório] é o local onde a busca será realizada. Se você não especificar um diretório, o find começará a busca a partir do diretório atual.
[opções] são os parâmetros adicionais que utilize para refinar sua busca. Alguns exemplos comuns são:
-name padrão: busca arquivos com base em um padrão de nome específico.
-type tipo: filtra os resultados por tipo de arquivo, como f para arquivos regulares ou d para diretórios.
-size n/c: pesquisa arquivos com base em seu tamanho, onde n é o valor do tamanho e c representa bytes (“c” pode ser substituído por k para quilobytes, “M” para megabytes, etc.).
-mtime n: filtra os arquivos pela data de modificação, onde n representa o número de dias atrás.
[expressão] é uma ação que você deseja executar nos arquivos encontrados. Alguns exemplos são:
-print: exibe o caminho dos arquivos encontrados.
-delete: exclui os arquivos encontrados.
-exec comando {} +: executa um comando personalizado nos arquivos encontrados.

Para ter acesso a mais opções do comando pode acessar o seu manual com o comando: man find.

Aqui estão alguns exemplos práticos de como usar o find:

Encontrar arquivos pelo nome

Para encontrar arquivos com base em seu nome, utilize o seguinte comando:

find /caminho/da/pesquisa -name "filename"

Por exemplo, para encontrar um arquivo chamado “exemplo.txt” no diretório atual, utilize o seguinte comando:

find . -name "exemplo.txt"

Este comando irá procurar no diretório atual, representado pelo ponto (.) ,e em todos os seus subdiretórios para um arquivo chamado exemplo.txt.

Encontrar arquivos pelo tipo

Para encontrar arquivos com base em seu tipo, utilize o seguinte comando:

find /caminho/da/pesquisa -type tipo

Onde tipo pode ser f para arquivos regulares, d para diretórios, l para links simbólicos e outros.

Por exemplo, para encontrar todos os arquivos regulares no diretório atual, utilize o seguinte comando:

find . -type f

Para encontrar todos os arquivos com uma determinada extensão:

find /home/user/Downloads/ -type f -name '*.pdf'

Este comando encontra todos os arquivos com a extensão .pdf no diretório /home/user/Downloads/ e seus subdiretórios. O argumento -type f especifica que o find deve procurar apenas por arquivos regulares.

Encontrar arquivos por data de modificação

Para encontrar arquivos com base em sua data de modificação, utilize o seguinte comando:

find /caminho/da/pesquisa -mtime n

Onde n é o número de dias desde a última modificação.

Por exemplo, para encontrar todos os arquivos modificados nos últimos 7 dias no diretório atual, utilize o seguinte comando:

find . -mtime -7

Para encontrar todos os arquivos modificados nos últimos 7 dias:

find /home/user/Documentos/ -type f -mtime -7

Este comando encontra todos os arquivos no diretório /home/user/Documentos/ e seus subdiretórios. O argumento -mtime -7 especifica que o find deve procurar por arquivos modificados nos últimos 7 dias.

Encontrar arquivos modificados em um intervalo de tempo específico

find /home/user/Downloads/ -type f -newermt "2023-01-01" ! -newermt "2023-05-10"

Este comando encontra todos os arquivos no diretório /home/user/Downloads/ e seus subdiretórios que foram modificados entre 1º de janeiro de 2023 e 10 de maio de 2023. O argumento -newermt especifica que o find deve procurar por arquivos modificados após a data e hora especificadas. O operador ! nega a condição e especifica que o find deve procurar por arquivos que não foram modificados após a segunda data e hora especificadas.

Encontrar arquivos por tamanho

Para encontrar arquivos com base em seu tamanho, utilize o seguinte comando:

find /caminho/da/pesquisa -size n[cwbkMG]

Onde n é o tamanho em unidades, como c para bytes, w para palavras, b para blocos, k para kilobytes, M para megabytes e G para gigabytes.

Por exemplo, para encontrar todos os arquivos com mais de 1 megabyte no diretório atual, utilize o seguinte comando:

find . -size +1M

Para encontrar todos os arquivos menores que 10 megabytes:

find /home/user/Downloads/ -type f -size -10M

Este comando encontra todos os arquivos no diretório /home/user/Downloads/ e seus subdiretórios que têm menos de 10M de tamanho. O operador especifica que o find deve procurar por arquivos menores do que o tamanho especificado.

Encontrar arquivos com permissões específicas

Para encontrar arquivos com base em suas permissões, utilize o seguinte comando:

find /caminho/da/pesquisa -perm permissão

Onde permissão são as permissões que você deseja procurar. Por exemplo, 777 significa que o arquivo tem permissões de leitura, gravação e execução para todos os usuários.

Por exemplo, para encontrar todos os arquivos com permissões de leitura e gravação para o usuário dono no diretório atual, utilize o seguinte comando:

find . -perm 600

Para encontrar todos os arquivos com permissões de leitura, gravação e execução para o usuário dono, e de leitura e gravação para todos os outros usuários:

find /home/user/Documentos/ -type f -perm 766

Este comando encontra todos os arquivos no diretório /home/user/Documentos/ e seus subdiretórios. O argumento -perm 766 especifica que o find deve procurar por arquivos com permissões 766.

Encontrar todos os diretórios vazios

find /home/user/Documentos/ -type d -empty

Este comando encontra todos os diretórios vazios no diretório /home/user/Documentos/ e seus subdiretórios. O argumento -type d especifica que o find deve procurar apenas por diretórios (e não por arquivos ou links simbólicos). O argumento -empty especifica que o find deve procurar apenas por diretórios vazios.

Encontrar todos os arquivos que não são mais usados

find /home/user/Downloads/ -type f -atime +90

Este comando encontra todos os arquivos no diretório /home/user/Downloads/ e seus subdiretórios. O argumento -atime +90 especifica que o find deve procurar por arquivos que não foram acessados nos últimos 90 dias.

Executar um comando em cada arquivo encontrado

find /home/user/Documentos/ -type f -name '*.txt' -exec chmod 644 {} \;

Este comando encontra todos os arquivos com a extensão .txt no diretório /home/user/Documentos/ e seus subdiretórios e executa o comando chmod 644 em cada arquivo encontrado. O argumento -exec especifica que o find deve executar o comando especificado em cada arquivo encontrado. O {} representa o nome do arquivo encontrado e a \ é apenas para o seguinte caracter(;) não ser interpretado e o ; finaliza o comando a ser executado.

Encontrar arquivos duplicados

find /home/user/Downloads/ -type f -exec md5sum {} \; | sort | uniq -w32 -d --all-repeated=separate

Este comando encontra arquivos duplicados no diretório /home/user/Downloads/ e seus subdiretórios. Ele usa a soma de verificação md5 para calcular o hash de cada arquivo encontrado, classifica a lista de hashes e identifica os hashes duplicados com o comando uniq. O argumento -w32 especifica que o uniq deve considerar apenas os primeiros 32 caracteres de cada linha, ou seja, o hash md5. O argumento -d especifica que o uniq deve imprimir apenas as linhas duplicadas. O argumento –all-repeated=separate especifica que o uniq deve imprimir cada grupo duplicado em uma seção separada.

Encontrar arquivos com base em expressões regulares

find /home/user/Downloads/ -type f -regextype posix-extended -regex '.*\.(jpg|png)'

Este comando encontra todos os arquivos no diretório /home/user/Downloads/ e seus subdiretórios que têm extensões de arquivo correspondentes a jpg ou png. O argumento -regextype posix-extended especifica que o find deve usar expressões regulares estendidas. O argumento -regex especifica a expressão regular que o find deve usar para corresponder aos nomes de arquivos.

Encontrar e excluir arquivos

find /home/user/Downloads/ -type f -name "*.txt" -delete

Este comando encontra todos os arquivos com extensão .txt no diretório /home/user/Downloads/ e seus subdiretórios, e os exclui. O argumento -name especifica que o find deve procurar por arquivos com nomes que correspondem à expressão fornecida. O argumento -delete especifica que o find deve excluir os arquivos encontrados.

Encontrar e renomear arquivos

find /home/user/Fotos/ -type f -name "*.jpg" -execdir mv {} foto_{} \;

Este comando encontra todos os arquivos com extensão .jpg no diretório /home/user/Fotos/ e seus subdiretórios, e renomeia cada arquivo adicionando o prefixo foto_ ao seu nome original. O argumento -name especifica que o find deve procurar por arquivos com nomes que correspondem à expressão fornecida, no caso arquivos com a extensão .jpg. O argumento -execdir permite que você execute um comando em cada arquivo encontrado, no diretório onde o arquivo foi encontrado. O comando mv é usado para renomear cada arquivo encontrado, adicionando o prefixo foto_ ao seu nome original. A expressão {} é usada para representar o arquivo encontrado, e o caractere \; é usado para indicar o fim do comando, onde a \ é para o ; não ser interpretado pelo shell.

Encontrar e exibir informações de diretórios

find /var/log/ -type d -printf "Diretório: %p\nNúmero de arquivos: %k\nTamanho total: %s bytes\n\n"

Este comando encontra todos os diretórios no diretório /var/log/ e seus subdiretórios, e exibe informações sobre cada diretório encontrado. O argumento -type especifica que o find deve procurar por diretórios. O argumento -printf permite que você especifique um formato de impressão personalizado para as informações do diretório. No exemplo acima, o comando printf é usado para imprimir o caminho completo do diretório, o número de arquivos contidos no diretório, representado pela opção %k, e o tamanho total dos arquivos no diretório em bytes, a expressão %p é usada para representar o caminho completo do diretório, e \n\n é usado para adicionar duas linhas em branco entre as informações de cada diretório encontrado.

Encontrar e comprimir arquivos antigos

find /home/user/Documentos/ -type f -mtime +30 -execdir tar -czvf {}.tar.gz {} \;

Este comando encontra todos os arquivos no diretório /home/user/Documentos/ e seus subdiretórios, usando o argumento -mtime +30, temos o que foi modificados há mais de 30 dias, e assim os comprime em arquivos .tar.gz. O argumento -execdir permite que você execute um comando em cada arquivo encontrado, o comando tar é usado para comprimir cada arquivo encontrado em um arquivo .tar.gz. O nome do arquivo de saída é gerado automaticamente pelo find, adicionando a extensão .tar.gz ao nome original do arquivo. A expressão { } é usada duas vezes no comando, para representar o arquivo encontrado e o nome do arquivo de saída.

Por que usar o comando find?

O comando find é extremamente útil para gerenciar e organizar arquivos em sistemas Linux. Com ele, você pode localizar arquivos com base em vários critérios e executar ações em lotes em um grande número de arquivos. Isso pode economizar muito tempo e ajudar a automatizar tarefas repetitivas.

Motivos para se aventurar com o comando find:

  • Localização precisa de arquivos
  • Flexibilidade
  • Eficiência
  • Execução de ações nos arquivos encontrados
  • Automação de tarefas

Conclusão

Em resumo, vimos apenas alguns exemplos de como usar o comando find para realizar diversas tarefas em seu sistema Linux. Com a prática e a exploração dos diferentes argumentos e opções, você pode encontrar ainda mais maneiras de usar este comando poderoso e versátil para poder economizar seu tempo, ajudando a localizar, gerenciar e automatizar tarefas relacionadas a arquivos, sua flexibilidade e recursos avançados o tornam uma escolha exata para lidar com o sistema de arquivos de forma eficiente e produtiva.

 

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

 

 

Anterior Criando imagens personalizadas com Packer para Google Cloud Platform
Próxima Descubra como otimizar seu banco de dados com particionamento no PostgreSQL

About author

Deborah Melo
Deborah Melo 9 posts

Analista de Infraestrutura | Construtora na 4Linux | LPIC 1 | Graduada em Eng. Elétrica | Apaixonada por tecnologia e ideologias Open Source.

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Maximize a eficiência da sua infraestrutura com o novo recurso de importação do Terraform

O Terraform pode importar recursos de infraestrutura existentes. Essa funcionalidade permite colocar recursos existentes sob o gerenciamento do Terraform. Isso é muito útil quando estamos iniciando no uso do terraform

Infraestrutura TI

Como Configurar Alta Disponibilidade de Interfaces de Rede com Bonding no Linux

Quando falamos de infraestrutura, um dos pré-requisitos é se pensar em alta disponibilidade, seja ela de: Máquinas Virtuais Storages Máquinas Físicas Links de Internet E etc. Nesse post vou explicar

DevOps

Dicas para Reduzir o Tamanho das Imagens do Docker e Melhorar seu Desempenho

Não há mais como fugir, cedo ou tarde estaremos esbarrando com a pequena baleia amigável. Aprenderemos o que é container, qual o papel do Docker no meio disso tudo, e