Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Dicas de utilizacao do Find

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.

Alterando Arquivos com o Find

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;" {} \;

Fazendo Muita Coisa com Arquivos Alterados

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.

Veja a relação completa dos artigos de Angelo Roberto Bonfieti Junior

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.95/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1198 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Programando o Android