O comando “find”, no Linux, é bastante utilizado. Trata-se até de um comando importantíssimo, eu diria. Com ele podemos não somente realizar buscas por arquivos e diretórios, mas também, através da utilização de diversos parâmetros adicionais, realizar outras operações, em conjunto.
Ao mesmo tempo em que o comando pode ser usado para encontrar arquivos e/ou pastas utilizando uma ampla gama de critérios, por exemplo, com ele também podemos apagar arquivos, alterar permissões, etc. Ele também pode, por exemplo, localizar arquivos que foram alterados dentro de um intervalo de dias que o usuário irá especificar (digamos que você deseja saber quais arquivos no servidor foram alterados, por exemplo, nos últimos 30 dias).
É também possível utilizar o comando “find” para encontrar arquivos com base em seu tamanho. É até mesmo possível especificar uma “faixa”: por exemplo, localizar arquivos que possuam entre 10 e 20MB. Encontrar e deletar tais arquivos também é possível.
Abaixo seguem alguns exemplos de utilização do “find” na linha de comando:
- find -name codigofonte.php
O comando acima encontrará todos os arquivos chamados “codigofonte.php” que se encontram no diretório atual. Abaixo você pode conferir um possível resultado:
root@host [/home/usertest]# find -name codigofonte.php
./codigofonte.php
root@host [/home/usertest]#
Já o comando abaixo encontrará todos os arquivos chamados “codigofonte.txt” que estejam dentro do diretório “/home/usertest”. Repare que aqui não precisamos estar dentro do diretório, ao contrário do exemplo acima.
- find /home/usertest -name codigofonte.txt
Um possível resultado segue abaixo:
root@host [/]# find /home/usertest -name codigofonte.txt
/home/usertest/public_html/codigofonte.txt
/home/usertest/codigofonte.txt
root@host [/]#
Perceba que no resultado acima foram encontrados dois arquivos “codigofonte.txt”. Um em “/home/usertest/public_html/” e outro em “/home/usertest/”.
Podemos também utilizar o comando “find” juntamente com o parâmetro “-iname”, ao invés de “-name”. Desta forma, a busca trará todos os arquivos, tenham eles letras minúsculas ou maiúsculas na composição de seus nomes. Veja:
- find -iname codigofonte.txt
Ou:
- find /home/usertest -iname codigofonte.txt
Veja alguns resultados possíveis:
- Comando digitado dentro do diretório:
root@host [/home/usertest]# find -iname codigofonte.txt
./public_html/codigofonte.txt
./Codigofonte.txt
./codigofonte.txt
Ou:
- Comando digitado fora do diretório:
root@host [/]# find /home/usertest -iname codigofonte.txt
/home/usertest/public_html/codigofonte.txt
/home/usertest/Codigofonte.txt
/home/usertest/codigofonte.txt
root@host [/]#
Que tal agora utilizarmos o comando “find” para encontrar e remover diversos arquivos, ao mesmo tempo? Todos os arquivos que obedeçam a um critério, por exemplo, e que estejam dentro de um diretório específico?
Basta digitar o comando abaixo, realizando, claro, as alterações necessárias conforme suas necessidades:
- find /home/usertest -name *.php -exec rm {} \;
Através do exemplo acima, serão localizados todos os arquivos com extensão .php, dentro do diretório “/home/usertest”. Eles também serão apagados, devido à combinação do “find” com o parâmetro “-exec”, o qual então executará o comando “rm” (remove) logo em seguida, para a devida remoção dos arquivos.
Podemos, obviamente, alterar “*.php” por qualquer outra extensão de arquivo, como por exemplo “*.txt”, “*.exe”, “*.html”, “*.jpg” e assim por diante.
Da mesma forma, podemos fazer com que o comando localize e apague todos os arquivos independentemente dos mesmos conterem letras maiúsculas ou minúsculas na composição de seus nomes, através do já mencionado parâmetro “-iname”, ao invés de “-name”. Veja:
- find /home/usertest -iname *.php -exec rm {} \;
Agora vamos localizar e alterar as permissões (chmod) de arquivos. Digamos que você deseja encontrar todos os arquivos dentro de um diretório com chmod 777 e queira alterar suas permissões para 644. Simples, também:
- find /home/usertest -type f -perm 0777-print-exec chmod 644{} \;
No exemplo acima, “-type” serve para determinar o tipo do arquivo, e o “f” limita a busca a “arquivos normais” (regular files), os quais contêm dados. Arquivos de texto, binários. Logo em seguida temos o parâmetro relativo à permissão que desejamos alterar (-perm 0777) e finalmente temos “-print -exec chmod 644″, para a devida alteração das permissões para 644.
E para encontrar arquivos que foram modificados nos últimos 30 dias, digamos? Fácil, digite o seguinte:
- find /-mtime 30
Lembre-se de que você pode alterar o valor “30” pelo que desejar.
Deseja encontrar arquivos dentro de um mesmo diretório que possuam tamanhos a partir de 10MB e com menos de 30MB? Simples:
- find /home/usertest -size 10M-size -30M
Para localizar em um diretório e apagar de uma vez arquivos maiores que, digamos, 150MB, utilize o comando abaixo :
- find /home/usertest -size +150M–exec rm -rf {} \;
E nossa última dica, por hoje. Encontrar e apagar todos os arquivos de um determinado tipo, pertencentes a um determinado usuário, dentro de uma pasta:
- find /home/usertest -user codigofonte -iname "*.txt"
Onde “/home/usertest” é o diretório dentro do qual desejamos trabalhar, “codigofonte” é o usuário ao qual pertencem os arquivos, e txt representa a extensão dos arquivos. O parâmetro “-iname”, lembrando mais uma vez, serve para que não seja feita nenhuma distinção entre letras maiúsculas e minúsculas, mas você pode também mudar para “-name”.
Vale ressaltar que você pode e deve alterar os caminhos e os nomes dos arquivos, além das extensões e valores, conforme suas necessidades (“/home/usertest”, “codigofonte.php”, “*.php”, “codigofonte”, etc).
Existem diversas maneiras de utilizar o comando “find”, além das acima. Combinações e variações que utilizam os exemplos acima também podem ser feitas. Como eu disse anteriormente, este é um comando bastante útil e muito utilizado.
Postagem original:
http://codigofonte.uol.com.br/artigos/11-exemplos-de-utilizacao-do-comando-find-no-linux
Crédito: Marcos A.T. Silva