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.