Domine o Comando Find no Linux: 40+ Exemplos Práticos!

Foto do autor

By luis

últimas postagens

O comando find no Linux é uma ferramenta extremamente versátil que capacita os administradores de sistemas a localizar e manipular arquivos e pastas, utilizando uma vasta gama de critérios de busca. Ele permite identificar elementos por nome, tipo, extensão, tamanho, permissões e outros atributos.

Além de simplesmente encontrar arquivos e diretórios, a combinação do comando find com outras ferramentas possibilita a execução de ações sobre os resultados obtidos. Ao empregar a opção -exec, os administradores podem acionar comandos externos e realizar operações como cópia, movimentação, remoção ou alteração das permissões de arquivos que correspondam aos critérios definidos, como tamanho, nome, entre outros.

Neste guia, iniciaremos com uma exploração dos comandos básicos de localização no Linux, acompanhados de exemplos práticos. Isso demonstrará como identificar arquivos e pastas. Posteriormente, abordaremos o uso da opção -exec para efetuar operações nos arquivos ou pastas, com base em seus atributos como tamanho, permissões, etc.

A estrutura geral do comando find segue o seguinte padrão:

find {caminho} {nome-do-arquivo-ou-pasta-a-pesquisar} {ação-a-ser-realizada}

Onde:

  • caminho especifica o diretório de partida para a busca.
  • nome-do-arquivo-ou-pasta-a-pesquisar define o nome do elemento a ser procurado.
  • ação-a-ser-realizada indica a operação a ser executada (copiar, remover, mover, etc.).

Neste tutorial, demonstraremos como localizar arquivos e pastas que correspondam a padrões especificados. Também analisaremos como efetuar ações sobre os elementos encontrados pelo comando find. Este guia é baseado no Ubuntu, mas os conceitos são aplicáveis à maioria das distribuições e versões do Linux.

Localizando Arquivos e Pastas

Encontrar Arquivos Específicos por Nome ou Extensão

Para localizar um arquivo específico, execute o comando abaixo a partir da raiz (/). O comando deverá conter o nome exato do arquivo que você procura.

find . -name file22.txt

Resultado:

./test/file22.txt
./sales/file22.txt

Note que os resultados incluem o caminho completo até o arquivo. Isso é crucial quando você não tem certeza do diretório onde o arquivo está armazenado, ou quando ele existe em múltiplos locais.

Você também pode buscar um arquivo específico em outro diretório, mesmo estando em sua localização atual. Nesse caso, você precisará fornecer o caminho para o diretório em que deseja realizar a pesquisa.

find ./test -name file22.txt

Localizando Arquivos Específicos em Outro Diretório

Para ilustrar, vamos buscar todos os arquivos que iniciam com a palavra “file” dentro do diretório test.

find ./test -name file*

Resultado:

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5.doc

Pesquisar Arquivos por Extensão

Para identificar um arquivo com uma extensão específica no Linux, adicione a extensão desejada ao comando.

find . -name *.txt

Resultado:

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Localizar Arquivos e Pastas por Nome

Utilize o comando a seguir para encontrar arquivos e pastas que iniciem com as letras “qa”. Em nosso sistema, temos os arquivos qatree.txt e qa.txt, além de uma pasta nomeada qa.

Ao executarmos o comando:

find ./ -name "qa*"

Obteremos o seguinte resultado:

./test/qatree.pdf
./test/qa.txt
./home/qa

O comando retorna os arquivos e pastas que atendem aos critérios de busca. Para localizar exclusivamente arquivos ou pastas, é necessário especificar essa condição no comando.

Encontrar Apenas Arquivos ou Pastas

Para buscar apenas arquivos, empregue a opção -type f.

Apenas arquivos:

find ./ -type f -name "qa*"

Resultado:

./test/qatree.pdf
./test/qa.txt

Apenas pastas:

Adicione a opção -type d para encontrar apenas diretórios.

find ./ -type d -name "qa*"

Resultado:

./home/qa

Comando de Localização que Ignora Maiúsculas e Minúsculas

As buscas realizadas com a opção -name são sensíveis a maiúsculas e minúsculas, não exibindo resultados que usem letras maiúsculas ou minúsculas diferentes daquelas especificadas na busca. Para realizar uma busca que ignore essa distinção, utilize a opção -iname.

find ./ -iname "qa*"

Resultado:

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Buscar um Arquivo em Múltiplos Diretórios

Para localizar arquivos em diferentes diretórios, inclua seus respectivos caminhos no comando. Por exemplo, vamos pesquisar nos diretórios test e numeric.

find ./test ./numeric -name file22.txt -type f

Resultado:

./test/file22.txt
/root/numeric/file22.txt

Encontrar Vários Arquivos com Extensões Diferentes em Todos os Diretórios

O comando find permite identificar múltiplos arquivos que compartilham extensões distintas, como *.doc, *.txt, *.pdf, etc. Isso pode ser feito individualmente para cada extensão ou através de um único comando que abranja todas as extensões desejadas.

find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )

Resultado:

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Encontrar Arquivos Contendo um Texto Específico

Em algumas situações, você pode precisar localizar um arquivo que contenha um texto específico, mas não se lembra do nome ou da localização do arquivo. Este comando permite encontrar todos os arquivos que contenham o texto desejado.

Para buscar todos os arquivos que contenham a palavra “hiperconvergência”, utilize:

find / -type f -exec grep -l -i "hiperconvergencia" {} ;

Resultado:

/root/numeric/hci
/root/HCIP

A opção -i permite que o comando ignore a diferença entre maiúsculas e minúsculas, identificando o texto tanto em letras maiúsculas quanto minúsculas, por exemplo: Hiperconvergência, hiperconvergência, etc.

Para buscar arquivos em um diretório específico, basta adicionar o caminho ao comando:

find ./numeric -type f -exec grep -l -i "hiperconvergencia" {} ;

Resultado:

./numeric/hci

Explore outros exemplos de comandos grep.

Localizar Arquivos e Pastas por Tamanho

Você pode encontrar todos os arquivos ou pastas que sejam menores, iguais ou maiores que um tamanho específico, dentro de um determinado intervalo ou até mesmo vazios. Utilize o formato de tamanho apropriado dependendo do tipo de arquivos ou pastas que você procura.

As opções de tamanho incluem:

c – bytes

k – kilobytes

M – Megabytes

G – Gigabytes

Localizar Arquivos de um Determinado Tamanho – Exatamente 30 MB

Para pesquisar todos os arquivos que possuam exatamente 30 MB:

find / -size 30M

Localizar Arquivos Maiores que um Tamanho Específico

find -size +2M

Resultado:

. /Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Localizar Arquivos Menores que 10 MB no Diretório Atual

find . -type f -size -10M

Localizar Arquivos com Tamanhos entre 100-200 MB

Ao procurar arquivos dentro de um intervalo específico, por exemplo, entre 100 e 200 MB:

find / -size +100M -size -200M

Procurar Pastas Maiores que 20kb

find / -type d -size +20k

Localizar Arquivos e Pastas Vazios

Arquivos:

find ./ -type f -size 0

ou

find ./ -type f –empty

Pastas:

find ./ -type d –empty

Localizar Arquivos por Idade ou Tempo de Modificação

Para encontrar arquivos com mais de n dias:

find /path/ -type f -name '*.txt' -mtime +8

O argumento -mtime +8 procurará arquivos .txt com mais de 8 dias.

Por Data de Modificação

Este comando procurará por arquivos modificados nas últimas 17 horas:

find . -mtime -17 -type f 

Procura por pastas modificadas nos últimos 10 dias:

find . -mtime -10 -type d 

Localizar Arquivos com Base em Acesso ou Modificação

Localize arquivos com base na data ou hora em que foram acessados. Isso permite que você identifique quais arquivos foram ou não acessados ​​em um período específico.

Para ver os arquivos que não foram acessados ​​nos últimos 10 dias no diretório home:

find /home -atime +10

Arquivos acessados ​​há exatamente 10 dias:

find /home -atime 10

Acessados ​​nos últimos 10 dias:

find /home -atime -10

Localizar Arquivos Modificados nos Últimos n Dias

Você também pode procurar arquivos no diretório /home que foram modificados nos últimos 10 dias usando o comando:

find /home -mtime -10 

Localizar Arquivos Modificados Dentro de um Período Específico

Por exemplo, para encontrar todos os arquivos modificados entre 6 e 15 dias atrás no diretório home:

find /home -type f -mtime +6 -mtime -15

Arquivos e Pastas Acessados nos Últimos 10 Minutos

Para encontrar os arquivos acessados nos últimos 10 minutos, utilize a opção -amin.

find . -amin -10 -type f

Resultado:

./.bash_history
./[email protected]:~#

Pastas acessadas nos últimos 10 minutos:

find . -amin -10 -type d

Localizar Arquivos Correspondendo a Permissões Específicas

Sintaxe:

$ find -perm mode

Onde mode é a permissão, representada de forma numérica (como 644, 655, 700, 777, etc.) ou com letras (como u=x, a=r+x, etc.).

Você pode especificar o modo das seguintes três maneiras:

  • Sem um prefixo, quando deseja encontrar arquivos com as permissões exatas especificadas.
  • Com - para arquivos que possuam pelo menos a permissão especificada. Isso retorna arquivos com as permissões mais altas especificadas e adicionais.
  • O uso de / requer a especificação do proprietário ou grupo com permissão para o arquivo.

Localizar Arquivos com Permissão 777

find -perm 777

Resultado:

./file1

Localizar arquivos com permissão de no mínimo 766

find -perm -766

Resultado:

./file2
./file1

O comando busca todos os arquivos nos quais:

  • O proprietário do arquivo tem permissões de leitura/gravação/execução.
  • O grupo tem permissões de leitura/gravação.
  • Outros têm permissão de leitura/gravação.

Assim, ele retorna dois arquivos que atendem a esse critério: file1 e file2. Os arquivos não precisam ter as permissões exatamente 766, podendo ter permissões adicionais, desde que possuam no mínimo as permissões especificadas.

Localizar Arquivos Graváveis ​​pelo Proprietário

Agora, utilizaremos / para buscar arquivos que possam ser gravados por seu proprietário, grupo ou outros.

find -perm /222
.
./file2
./file3
./file1

O comando acima busca arquivos que sejam graváveis pelo proprietário ou pelo grupo.

Isso retorna arquivos que podem ser gravados por qualquer um, mas não necessariamente por ambos. Para visualizar arquivos em que ambos possuem permissões de escrita, use o prefixo -.

find -perm -220

Resultado:

./file2
./file1

Localizar Arquivos Pertencentes a um Usuário

Localizar todos os arquivos que pertencem ao usuário jack:

find /home -user jack

Resultado:

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

Localizar Arquivos Específicos Pertencentes a um Usuário

Localizar todos os arquivos de texto que pertencem ao usuário jack:

find /home -user jack -iname "*.txt"

Resultado:

/home/jack/docs/file32.txt

Localizar e Listar Arquivos e Pastas Juntamente com suas Permissões

find -name "*.conf" | ls -l

Resultado:

total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

Localizar e Agir de Acordo com os Resultados

Nesta seção, exploraremos como você pode realizar ações sobre os arquivos que correspondem ao padrão especificado no comando find.

Localizar Arquivos e Alterar Permissões

Localize e altere as permissões de certos tipos de arquivo. Em nosso caso, vamos trabalhar com arquivos PHP com diferentes permissões, conforme mostrado a seguir.

[email protected]:~/ver$ ls -la

total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

Vamos agora buscar todos os arquivos PHP (acima) e alterar suas permissões para 755.

find ver -name "*.php" -type f -exec chmod 755 {} ;

O comando busca por arquivos PHP dentro do diretório ver e define suas permissões para 755 (rwxr-xr-x).

Resultados:

[email protected]4:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

Localizar e Alterar Permissões de Arquivos e Pastas

Localizar arquivos com permissões 644 e alterá-las para 655:

find . -type f -perm 644 -exec chmod 655 {} ;

Você também pode buscar por pastas com permissões 644 e alterá-las para 755.

find . -type d -perm 644

Resultado:

./docs   

A pasta docs possui permissões 644:

drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

Para configurar para 755, executamos:

find . -type d -perm 644 -exec chmod 755 {} ;

Agora, podemos verificar novamente para ver as permissões 755:

find . -type d -perm 755

Resultado:

.
./docs

Acima, podemos ver que as pastas root e docs possuem permissões 755.

O comando ls -la fornece os seguintes detalhes:

drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

Localizar e Copiar Arquivos ou Pastas

Localize e copie um arquivo específico para um diretório.

O comando abaixo irá localizar o arquivo file22.txt e copiá-lo para o diretório ~/tmp/images.

find -iname file22.txt -exec cp {} ~/tmp/images ;

Localize e copie um tipo de arquivo para um diretório.

Para localizar arquivos como imagens com a extensão jpg no diretório atual e copiá-los para um local diferente, como uma pasta de imagens, use:

find -iname '*.jpg' -exec cp {} ~/tmp/images ;

Isso irá localizar e copiar todos os arquivos jpg para a pasta ~/tmp/images.

Localizar e Copiar um Arquivo para Múltiplos Diretórios

Localize e copie um único arquivo para vários diretórios.

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

Isso irá localizar o arquivo hci e copiá-lo para os três diretórios: /tmp/dir1/, /tmp/dir2/ e $HOME/3/.

Localizar e Mover Arquivos para um Diretório Diferente

Para mover um arquivo conhecido de um diretório para outro, como por exemplo, mover o arquivo universal.php:

find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

Pesquise e mova arquivos com uma extensão específica para uma pasta diferente:

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

Localizar Arquivos Específicos e Mover para uma Pasta Diferente

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

O comando busca todos os arquivos cujos nomes começam com uni e possuem qualquer extensão. Em seguida, move-os para o diretório /unifiles/.

Localizar e Mover Arquivos com Base na Idade

Localize e mova arquivos com mais de um número específico de dias para um local diferente, como por exemplo, para um diretório de arquivo.

find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

Isso irá procurar arquivos PDF com mais de 20 dias e movê-los para o diretório backup1.

Localizar e Excluir Arquivos e Pastas

A sintaxe para localizar e remover arquivos ou pastas no diretório atual é:

find . -type f -name "arquivo-a-ser-excluido" -exec rm -f {} ; para excluir apenas arquivos, ou

find . -type d -name "pasta-a-ser-excluida" -exec rm -rf {} ; para excluir apenas pastas.

Localizar e Excluir Apenas Arquivos Específicos

Para localizar e excluir arquivos que iniciem com til, use:

find . -type f -name "til*" -exec rm {} ; 

Para localizar e excluir pastas que iniciem com til:

find . -type d -name "til*" -exec rm {} ;

Remover Arquivos e Pastas

find . -name "til*" -exec rm -rf {} ; 

Isso irá remover arquivos e pastas que comecem com as letras til.

Excluir por Extensão

Abaixo está como você pode localizar e excluir todos os arquivos txt no diretório atual. Substitua txt por outra extensão, como bak, pdf ou qualquer outra que você deseja remover.

find . -type f -name "*.txt" -exec rm -f {} ;

Caso você queira que o sistema solicite confirmação antes de excluir cada arquivo, adicione a opção -i, conforme abaixo.

find . -type f -name "*.txt" -exec rm -i {} ;

Resultado:

rm: remover o arquivo regular vazio './File22.txt'? y
rm: remover o arquivo regular vazio './file22.txt'? y
rm: remover o arquivo regular vazio './file23.txt'?

Por padrão, o -rm não remove pastas, sendo necessário usar a opção -r para garantir uma remoção recursiva. Isso assegura a exclusão de pastas vazias e daquelas que contêm arquivos. A opção -f força a remoção, sendo usada para arquivos e pastas.

Localizar e Excluir Arquivos com Mais de n Dias

Localize e exclua arquivos de backup com mais de 20 dias do diretório atual.

find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

Isso irá excluir todos os arquivos .bak com mais de 20 dias.

Localizar e Excluir Apenas Pastas

Para excluir uma pasta chamada dir22:

find . -type d -name dir22 -exec rm -rf {} ;

Assegure-se de que você esteja usando as maiúsculas e minúsculas corretas para o nome da pasta, ou use a opção -iname.

find . -type d -iname Dir22 -exec rm -rf {} ;

Remove Dir22 e dir22.

Para confirmar antes da exclusão, use a opção -i.

find . -type d -iname Dir22 -exec rm -rf -i {} ;

Resultado:

rm: remover a pasta './Dir22'?  n
rm: remover a pasta './dir22'?  y

Em nosso caso, digitamos n para a pasta Dir22, que não será excluída, e y para a pasta dir22, que será removida.

Localizar e Remover Arquivos Vazios

Você pode usar qualquer um dos seguintes comandos para localizar arquivos vazios e excluí-los automaticamente.

find ./ -type f -size 0 -exec rm -f {} ;

ou

find ./ -type f -size 0 | xargs rm -f

ou

find ./ -type f -size 0 –delete

Localizar e Remover Pastas Vazias

Para remover pastas vazias, usaremos a opção d.

find ./ -type d -empty -exec rmdir {} ;

Outra alternativa é utilizar delete em vez de rmdir.

find ./ -type d -empty -delete

É crucial ter em mente que a exclusão de arquivos ou pastas críticas do seu computador pode danificar o sistema operacional, aplicativos ou até mesmo levar à perda de dados importantes.

Para evitar exclusões acidentais, é recomendado utilizar uma conta de usuário não root. Além disso, certifique-se de excluir apenas os arquivos que são realmente desnecessários e de ter um backup de todos os seus arquivos importantes.

Próximos Passos?

Agora é sua vez! Experimente os comandos de localização do Linux mencionados acima em seu laboratório ou ambiente de teste. Verifique se você pode utilizá-los para automatizar a limpeza do seu sistema de arquivos com o Crontab. E, para aprimorar ainda mais seus conhecimentos sobre Linux, explore este curso online.