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]
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:
About author
Você pode gostar também
Descubra o Apache Guacamole: a solução para acessos remotos na sua empresa
Neste post falo sobre uma ferramenta bastante interessante do projeto Apache chamado Guacamole que irá resolver problemas de acessos remotos a servidores em sua empresa. É uma mão na roda.
Guia Prático: Como Implementar uma Wiki em Ambiente Corporativo
Em ambientes corporativos, onde vários projetos são elaborados, algumas informações são muito importantes e muito específicas aos diretamente envolvidos, como configurações de ambiente e opções dos parâmetros. Neste contexto, a
Como implementar a funcionalidade de autocompletar com Elasticsearch
A função de autocompletar presente na maioria das plataformas que utilizamos no dia a dia, como serviços de busca, plataformas de streaming e lojas online, já se provou uma excelente