O comando find do Linux é uma ferramenta poderosa que permite aos administradores de sistema localizar e gerenciar arquivos e diretórios com base em uma ampla variedade de critérios de pesquisa. Ele pode encontrar diretórios e arquivos por nome, tipo ou extensão, tamanho, permissões, etc.
Além de localizar arquivos e diretórios, combinar o comando find com outros permite que você execute ações sobre os resultados. Adicionar a opção -exec permite que os administradores de sistema executem comandos externos e executem ações como copiar, mover, excluir ou alterar as permissões dos arquivos que correspondem aos critérios especificados, como tamanho, nome etc.
Neste artigo, começaremos explicando os comandos básicos de localização do Linux com exemplos. Isso mostrará como localizar arquivos e diretórios. Em seguida, mostraremos como usar a opção -exec para atuar nos arquivos ou diretórios com base em seu tamanho, permissões etc.
A sintaxe geral para o comando find é
find {path} {name -of-file or dir-to-search} {action-to-take}
Onde,
- path especifica o diretório.
- nome do arquivo ou diretório a ser pesquisado : Nome do arquivo ou diretório a ser procurado
- ação a ser executada: como copiar, excluir, mover, etc.
Neste tutorial, explicaremos como localizar arquivos e diretórios correspondentes aos padrões especificados. Também veremos como realizar ações nos arquivos ou diretórios que o comando find localiza. O guia é baseado no Ubuntu, mas é aplicável à maioria das distribuições e versões do Linux.
últimas postagens
Encontrar arquivos e diretórios
Encontre arquivos específicos por nome ou extensão
Para procurar um arquivo específico, execute o seguinte comando na raiz (/). O comando contém o nome exato do arquivo que você está procurando.
find . -name file22.txt
Resultado
./test/file22.txt ./sales/file22.txt
Observe que os resultados incluem o caminho. Isso é importante se você não souber o diretório onde o arquivo está localizado ou quando ele estiver em mais de um local.
Você também pode procurar o arquivo em outro diretório enquanto ainda estiver no local atual. Nesse caso, você precisa fornecer o caminho para o diretório onde deseja pesquisar.
find ./test -name file22.txt
Procurando por arquivos específicos em outro diretório
No nosso caso, buscaremos todas aquelas que começam com o arquivo de letras no 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 encontrar um arquivo no Linux com uma determinada extensão, adicione-o 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
Encontre arquivos e diretórios por nome
Use o comando abaixo para procurar arquivos e diretórios começando com as letras qa. Em nosso computador, temos os arquivos qatree.txt e qa.txt, além de um diretório chamado qa.
Se executarmos o comando;
find ./ -name "qa*"
Ele retorna a seguinte saída
./test/qatree.pdf ./test/qa.txt ./home/qa
O comando retorna os arquivos e diretórios correspondentes aos critérios de pesquisa. Para localizar apenas arquivos ou diretórios, você precisa especificar isso no comando.
Encontre apenas arquivos ou diretórios
Somente para arquivos, use a opção type f.
Somente arquivos
find ./ -type f -name "qa*"
Resultado
./test/qatree.pdf ./test/qa.txt
Somente diretórios
Adicione a opção type d para localizar apenas diretórios.
find ./ -type d -name "qa*"
Resultado
./home/qa
Comando de localização que não diferencia maiúsculas de minúsculas
Todas as pesquisas com a opção -name diferenciam maiúsculas de minúsculas e não fornecerão resultados com letras maiúsculas. Para obter todos os casos, use a opção -iname.
find ./ -iname "qa*"
Resultado
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Pesquise um arquivo em vários diretórios
Para localizar os arquivos em diretórios diferentes, adicione seus caminhos no comando. No nosso caso, vamos verificar nos diretórios teste e numérico.
find ./test ./numeric -name file22.txt -type f
Resultado
./test/file22.txt /root/numeric/file22.txt
Encontre vários arquivos com diferentes extensões de todos os diretórios
Você pode usar o comando find para localizar vários arquivos que compartilham as diferentes extensões, como *.doc, *.txt *.pdf, etc. Isso pode ser feito separadamente, uma extensão por vez, ou usando apenas um comando que inclui todos as extensões desejadas.
achar . -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
Encontre arquivos contendo determinado texto
Às vezes, você deseja acessar um arquivo que contém determinado texto, mas não consegue lembrar o nome ou o local do arquivo. Este comando permite encontrar todos os arquivos que contêm o texto de destino.
Para procurar todos os arquivos que contenham a palavra hiperconvergência”, use;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Resultado
/root/numeric/hci /root/HCIP
A opção –i permite que o comando ignore casos e encontre o texto em letras maiúsculas ou não, ou seja, hiperconvergência, hiperconvergência etc.
Para procurar os arquivos em um diretório específico, basta adicioná-los ao comando
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Resultado
./numeric/hci
Explore mais exemplos de comandos grep.
Encontre arquivos e diretórios com base no tamanho
Você pode encontrar todos os arquivos ou diretórios menores, iguais ou maiores que um determinado tamanho, dentro de um determinado intervalo ou vazios. Use o formato de tamanho apropriado dependendo do tipo de arquivos ou diretórios que você está procurando.
As opções de tamanho incluem;
c – bytes
k – kilobytes
M – Megabytes
G – Gigabytes
Encontre arquivos de um determinado tamanho – igual a 30 MB
Para pesquisar, encontre todos os arquivos de 30 MB
find / -size 30M
Encontre arquivos maiores que um tamanho especificado
find -size +2M
Resultado
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Encontre arquivos com menos de 10 MB no diretório atual
find . -type f -size -10M
Encontre arquivos com tamanhos entre 100-200 MB
Ao procurar arquivos dentro de um intervalo específico, como entre 100 e 200 MB
find / -size +100M -size -200M
Procure diretórios maiores que 20kb
localizar / -tipo d -tamanho +20k
Encontre arquivos e diretórios vazios.
arquivos
find ./ -type f -size 0
ou
find ./ -type f –empty
Diretórios
find ./ -type d –empty
Encontre arquivos por idade ou tempo de modificação
Encontrar arquivos com mais de n dias
find /path/ -type f -name '*.txt' -mtime +8
O -mtime +8 procurará arquivos txt com mais de 8 dias.
Por data de modificação
Isso procurará arquivos modificados nas últimas 17 horas
find . -mtime -17 -type f
Procura diretórios modificados nos últimos 10 dias
find . -mtime -10 -type d
Encontre arquivos com base no acesso ou modificação
Encontre arquivos com base na data ou hora acessada. Isso permite que você veja os arquivos que foram ou não acessados em um período especificado.
Para ver os arquivos que não foram acessados nos últimos 10 dias no diretório inicial.
find /home -atime +10
Arquivos acessados há exatamente 10 dias
find /home -atime 10
Acessado nos últimos 10 dias
find /home -atime -10
Encontre arquivos modificados nos últimos n dias
Você também pode procurar os arquivos no diretório /home modificados nos últimos 10 dias usando o comando;
find /home -mtime -10
Encontre arquivos modificados dentro de um período específico.
Por exemplo, todos os arquivos modificados entre 6 e 15 dias atrás no diretório inicial.
find /home -type f -mtime +6 -mtime -15
Arquivos e diretórios acessados nos últimos 10 minutos
Para encontrar os arquivos acessados nos últimos 10 minutos, use a opção -amin.
find . -amin -10 -type f
Resultado
./.bash_history ./[email protected]:~#
Diretórios acessados nos últimos 10 minutos
find . -amin -10 -type d
Encontre arquivos correspondentes a permissões específicas
Sintaxe
$ find -perm mode
Onde mode é a permissão que é numérica como 644, 655, 700, 777, etc, ou letras como u=x, a=r+x, etc.
Você pode especificar o modo das três maneiras a seguir.
Encontre arquivos com permissão 777
find -perm 777
Resultado
./file1
Encontre arquivos com pelo menos 766
encontrar -perm -766
Resultado
./file2 ./file1
O comando procura todos os arquivos nos quais o
- 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 – arquivo1 e arquivo2. Os arquivos não precisam ter as permissões 766 exatas e podem ter permissões adicionais desde que tenham pelo menos as especificadas.
Encontre arquivos graváveis pelo proprietário
Agora usaremos o “/” para procurar arquivos graváveis por seu proprietário, grupo ou outros.
find -perm /222 . ./file2 ./file3 ./file1
O acima procura por arquivos que são graváveis por seu proprietário ou grupo.
Isso retorna arquivos que são graváveis por qualquer um, mas não necessariamente por ambos. Para ver os arquivos, onde ambos têm permissões graváveis, use o prefixo –.
find -perm -220
Resultado
./file2 ./file1
Encontrar arquivos pertencentes a um usuário
Encontre todos os arquivos pertencentes a 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
Encontre arquivos específicos pertencentes a um usuário
Encontre todos os arquivos de texto pertencentes a Jack
find /home -user jack -iname "*.txt"
Resultado
/home/jack/docs/file32.txt
Encontre e liste arquivos e diretórios junto 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
Encontre e aja de acordo com os resultados
Nesta seção, veremos como você pode agir nos arquivos que correspondem ao padrão especificado no comando find.
Localizar arquivos e alterar permissões
Encontre e altere as permissões de certos tipos de arquivo. No nosso caso, trabalharemos 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 procurar todos os arquivos PHP (acima) e substituir suas permissões por 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
O comando procura por arquivos PHP no diretório ver e, em seguida, define sua permissão 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 diretórios
Encontre arquivos com 644 permissões e altere-os para 655 permissões
find . -type f -perm 644 -exec chmod 655 {} ;
Você também pode procurar diretórios com 644 permissões e substituir por 755.
find . -type d -perm 644
Resultado
./docs
A pasta docs tem 644 permissões
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Para configurá-lo para 755, executamos
find . -type d -perm 644 -exec chmod 755 {} ;
Agora podemos verificar novamente para ver o que exatamente 755
find . -type d -perm 755
Resultado
.
./docs
Acima, podemos ver que os diretórios root e docs têm as 755 permissões.
O comando Ls –la fornece os seguintes detalhes
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Encontre e copie arquivos ou diretórios
Encontre e copie um arquivo específico para um diretório
O comando abaixo encontrará o arquivo file22.txt e o copiará para o diretório ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Encontre e copie um tipo de arquivo para um diretório
Para encontrar arquivos como imagens com 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 localizará e copiará todos os arquivos jpg para a pasta ~/tmp/images.
Encontre e copie um arquivo para vários diretórios
Encontre e copie um único para vários diretórios.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Isso encontrará o arquivo hci file e o copiará para os três diretórios de /tmp/dir1/ /tmp/dir2/ e $HOME/3/
Encontre e mova arquivos para um diretório diferente
Para mover um arquivo conhecido de um diretório para outro. Para mover o arquivo universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Pesquise e mova arquivos com uma determinada extensão para uma pasta diferente
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Encontre determinados arquivos e mova para uma pasta diferente específica
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
O comando procura todos os arquivos com nomes começando com uni e tendo qualquer extensão. Em seguida, ele os move para o diretório /unifiles/
Encontre e mova arquivos com base na idade
Localize e mova arquivos anteriores aos dias especificados para um local diferente, como o arquivo.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Isso procurará arquivos PDF com mais de 20 dias e os moverá para o diretório backup1.
Encontre e exclua arquivos e diretórios
A sintaxe para localizar e remover arquivos ou diretórios no diretório atual é
achar . -type f -name “arquivo a ser excluído” -exec rm -f {} ; para excluir apenas arquivos ou
achar . -type d -name “dir-to-delete” -exec rm -rf {} ; para excluir apenas diretórios
Encontre e exclua apenas arquivos específicos
Para localizar e excluir arquivos começando com til, use;
find . -type f -name "til*" -exec rm {} ;
Para localizar e excluir diretórios começando com til
find . -type d -name "til*" -exec rm {} ;
Remova arquivos e diretórios
find . -name "til*" -exec rm -rf {} ;
Isso removerá os arquivos e diretórios que começam 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 o txt por outra extensão como bak, pdf ou qualquer outra que você queira remover.
find . -type f -name "*.txt" -exec rm -f {} ;
Caso você queira que o sistema solicite a confirmação antes de excluir cada arquivo, adicione a opção -i conforme abaixo.
find . -type f -name "*.txt" -exec rm -i {} ;
Resultado
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Por padrão, o -rm não removerá os diretórios e você precisará usar a opção –r para garantir uma remoção recursiva. Isso garante a exclusão de diretórios vazios e aqueles que contêm arquivos. A opção -f força a remoção e é usada para arquivos e diretórios.
Encontre e exclua arquivos com mais de n dias
Encontre e exclua arquivos de backup com mais de 20 dias do diretório atual.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Isso excluirá todos os arquivos .bak com mais de 20 dias.
Localizar e excluir apenas diretórios
Para excluir um diretório chamado dir22
find . -type d -name dir22 -exec rm -rf {} ;
Assegure-se de que você corresponda às maiúsculas e minúsculas do nome do diretório 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 diretório ‘./Dir22’? n
rm: remover diretório ‘./dir22’? y
No nosso caso, digitamos n para o diretório Dir22, que não será excluído, e y para o diretório 22, que agora será removido.
Encontre e remova 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
Encontre e remova diretórios vazios
Para remover diretórios vazios, usaremos a opção d.
find ./ -type d -empty -exec rmdir {} ;
Outra alternativa é usar delete em vez de remover.
find ./ -type d -empty -delete
Observe que excluir sistema ou arquivos críticos do seu computador pode danificar o sistema operacional ou aplicativos ou levar à perda de seus dados importantes.
Para evitar exclusões acidentais, é recomendável usar uma conta de usuário não root. Além disso, certifique-se de excluir os arquivos corretos que não são úteis e de ter um backup de todos os seus arquivos de dados para garantir.
Qual é o próximo?
Vá em frente e experimente os comandos de localização do Linux acima em seu laboratório ou ambiente NÃO DE PRODUÇÃO. Veja se você pode usar algum para automatizar a limpeza do sistema de arquivos com o Crontab. E, para dominar o Linux, confira este curso online.