O comando find no Linux é muito útil e prático na pesquisa de arquivos. Ele consegue pesquisar arquivos baseados em vários critérios de busca como permissões, propriedades, data de modificação, etc.
Neste artigo será apresentado como usar o comando find com várias opções possíveis. Os exemplos são distintos para facilitar a compreensão. O comando find está disponível na maioria das distribuições linux por padrão.
Este é um comando que você deve dominar, se você quiser se sentir confortável com seu sistema Linux.
Então vamos começar, a forma básica do comando é:
find onde-quer-pesquisar critérios-de-busca o-que-você-procura
Exemplos básicos
1. Listar todos os arquivos do diretório corrente
Este comando lista todos os arquivos do diretório corrente bem como seus subdiretórios.
$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php
O comando é o mesmo que
$ find .
$ find . - print
2. Pesquisar num caminho ou diretório específico
Este comando vai pesquisar por arquivos no diretório test do diretório corrente. Por padrão vai listar todos os arquivos dentro de test.
$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php
O comando abaixo pesquisa arquivos pelo nome
$ find ./test -name abc.txt
./test/abc.txt
Também é possível utilizar coringas
$ find ./test -name *.php
./test/subdir/how.php
./test/cool.php
Perceba que todos os subdiretórios são pesquisados recursivamente. Isto é muito útil na busca de arquivos numa estrutura grande de diretórios
Ignorando o case-sentive
As vezes não sabemos se o nome está com letras maiúsculas ou minúsculas. Para ignorar esta diferença, basta utilizar a opção iname no lugar de name.
$ find ./test -iname *.Php
./test/subdir/how.php
./test/cool.php
3. Limite de profundidade da pesquisa
O comando find, por padrão, percorre toda a árvore de diretórios de forma recursiva. No entanto, a profundidade da pesquisa pode ser especificada. Por exemplo, nós não queremos ir mais de 2 ou 3 níveis para baixo nos sub-diretórios. Isso é feito usando a opção maxdepth.
$ find ./test -maxdepth 2 -name *.php
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php
O segundo exemplo usa maxdepth de 1, o que significa que ele não vai mais baixo do que um nível mais profundo, ou apenas no diretório atual.
Isto é muito útil quando queremos fazer apenas no diretório atual ou no máximo um nível de sub-diretórios de profundidade e não de toda a árvore de diretórios que levaria mais tempo uma busca limitada.
Assim como maxdepth existe uma opção chamada mindepth que faz o que o nome sugere, ou seja, ele vai pelo menos nível N profunda antes de procurar os arquivos.
4. Invertendo a pesquisa
Também é possível pesquisar por arquivos que não fazem nenhum critério no padrão determinado. Isso é útil quando se sabe quais arquivos serão excluídos da pesquisa.
$ find ./test -not -name *.php
./test
./test/abc.txt
./test/subdir
Assim, no exemplo acima, encontramos todos os arquivos que não têm a extensão do PHP, ou arquivos não-php. O comando find também suporta o ponto de exclamação no lugar de not.
find ./test ! -name *.php
5. Combine múltiplos critérios de busca
É possível usar vários critérios, por exemplo especificar nome e negar certos arquivos.
$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc
O comando find acima procura por arquivos que começam com abc em seus nomes e que não têm uma extensão php. Este é um exemplo de quão poderoso expressões de busca pode ser construído com o comando find.
operador OR
Ao usar vários critérios de nome, o comando find seria combiná-los com operador AND, o que significa que apenas os arquivos que satisfaçam todos os critérios serão correspondidos. No entanto, se precisamos executar uma correspondência com base OU então o comando find tem a opção "o".
$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php
A busca de comando acima funciona para os arquivos que terminam em qualquer extensão php ou txt.
6. Pesquisar somente os arquivos ou somente os diretórios
Às vezes queremos encontrar apenas os arquivos ou somente os diretórios com um determinado nome. Find pode fazer isso facilmente também.
$ find ./test -name abc*
./test/abc.txt
./test/abc
Somente arquivos
$ find ./test -type f -name abc*
./test/abc.txt
Somente diretórios
$ find ./test -type d -name abc*
./test/abc
Muito útil e prático!
7. Pesquisar vários diretórios juntos
Então, digamos que você deseja pesquisar dentro dois diretórios separados. Mais uma vez, o comando é muito simples
$ find ./test ./dir2 -type f -name abc*
./test/abc.txt
./dir2/abcdefg.txt
Veja, que foi listado os arquivos a partir de 2 diretórios separados.
8. Encontre os arquivos ocultos
Arquivos ocultos no linux começam com um ponto. Então, é fácil usar os critérios de nome e listar todos os arquivos ocultos.
$ find ~ -type f -name ".*"
9. Localizar arquivos com determinadas permissões
O comando find pode ser usado para encontrar arquivos com uma permissão específica usando a opção "perm". Os seguintes comando procuram arquivos com a permissão 0664
$ find . -type f -perm 0664
./abc.txt
./subdir/how.php
./abc.php
./cool.php
Isto pode ser útil para encontrar arquivos com permissões erradas que podem levar a problemas de segurança. Inversão também pode ser aplicada a verificação de autorização.
$ find . -type f ! -perm 0777
./abc.txt
./subdir/how.php
./abc.php
./cool.php
10. Localizar arquivos com sgid / bits suid definido
A opção "perm" do comando find aceita a mesma seqüência modo como chmod. O comando a seguir localiza todos os arquivos com permissão 644 e conjunto de bits SGID.
A opção perm também suporta o uso de uma sintaxe alternativa em vez de números octais.
$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private
Note que o "2> / dev / null" remove as entradas que têm um erro de "Permission Denied"
Conclusão
Então isso foi um rápido tutorial sobre o comando find. O find é um dos comandos mais essenciais no terminal, que permite a busca de arquivos muito fácil. É uma obrigação de todos os administradores de sistema. Assim, dominá-lo. Tem alguma dúvida? Deixe um comentário abaixo.