De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Angelo Roberto Bonfieti Junior
Data de Publicação: 03 de Dezembro de 2003
O comando find eh extremamente util para procurar arquivos que obedecam a um criterio particular. O find pode procurar arquivos que foram modificados nos ultimos X dias, arquivos maiores que um tamanho especifico ou arquivos que pertencam a um userid que nao esta definido no seu arquivo /etc/passwd, por exemplo, sao exemplos de situacoes faceis de serem resolvidas pelo comando find (e muito uteis, tambem). Voce tambem pode procurar arquivos de tipos especificos - como diretorios, links simbolicos ou arquivos normais - ou arquivos mais novos que um outro arquivo.
Voce pode procurar arquivos baseando-se em suas permissoes (por exemplo, todos os arquivos que possuem o bit setuid). Voce pode restringir comandos find a um diretorio especifico ou a file-systems.
O que pode nao ser tao obvio quanto a construcao do comando find apropriado para fazer o servico de vasculha que voce procura eh como construir um comando que ira fazer o que voce quer com os arquivos, uma vez que voce os tenha encontrado.
-print e -ls
Os dois comandos mais comuns usados com find sao, nao surpreendentemente, o -print e o -ls. A opcao -print imprime o nome do arquivo do ponto de vista do diretorio corrente (ex. /export/home/teste/tralha.txt ou somente ./teste/tralha.txt se a procura foi iniciada a partir do /export/home). A opcao -ls proporciona o mesmo tipo de informacao que voce iria ver se voce visalizasse os arquivos atraves do comando ls -li.
-exec
A opcao -exec eh indubitavelmente a proxima opcao mais popular e eh usada para especificar o que o find ira fazer com os arquivos que ele encontrar. Quando usamos a opcao -exec, o nome de cada arquivo encontrado pelo find eh representado no comando find pela sequencia de caracteres "{}" (sem as aspas ;-] ). O comando para imprimir o numero de linhas em cada um dos arquivos encontrados pelo find ira se parecer com isso:
root>> find . -type f -exec wc -l {} \;
A sequencia \; marca o fim do comando e, executando-o, voce poderia ter, como resultado, algo como:
74 ./030701_log.txt 12 ./testfile1 6 ./testfile2 5 ./ex
O comando para procurar por strings (sequencias) especificas e imprimir as strings e os nomes dos arquivos nas quais elas foram encontradas irao se parecer com:
find . -type f -exec grep "antes" {} \; -print
O -print neste comando eh colocado no final para que os arquivos mostrados sejam somente os que passaram pelo teste do grep.
Para modificar o conteudo de arquivos que sao localizados pelo find, voce pode usar o sed ou voce pode usar ainda um comando Perl como este que eh executado em todos os arquivos HTML no diretorio corrente e subdiretorios para alterar uma URL para outra:
find . -type f -name "*\.html" -exec perl -i -p -e \
's/www.antes.org/www.depois.com/g;' {} \;
Se voce frequentemente tem que mudar links em um website muito grande, um comando como esse certamente ira livrar muito tempo (e trabalho). Se voce quer dar este comando a alguem que nao ira gostar de lembrar do comando find, voce pode coloca-lo num script como esse:
#!/bin/bash if [ $# != 2 ]; then echo "usage $0 <antes> <depois>" exit else ANTES=$1 DEPOIS=$2 fi find . -type f -name "*\.html" -exec perl -i -p -e \ "s/$ANTES/$DEPOIS/g;" {} \;
Se voce quer executar um numero de comandos em cada arquivo que voce encontrar, existe um meio de faze-lo tambem - e isso nao requer a utilizacao da opcao -exec. Ao contrario, redirecione (com pipe) a saida do seu comando find normal para um repetidor while como este e voce pode executar quantos comandos desejar entre os marcadores do e done:
find . -type f | while read i do file $i ls -i $i wc -l $i done
Neste loop o nome do seu arquivo eh associado ao $i. Este comando trabalha com shells da familia Bourne Shell (sh, ksh, bash e outros).
Muito trabalho pode ser realizado com uma combinacao inteligente do comando find.
Algumas ideias deste artigo foram fornecidas por Robert D. e Chang A.
Este texto foi traduzido integralmente do Original veiculado no forum "Unix in the Enterprise" sob titulo "Tricks with find" da revista eletronica ITworld (www.itworld.com) no dia 17/07/2003.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários