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

 

Assine a Lista Dicas-L

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

FIND, muito mais que um "procurador de arquivos

Colaboração: Nícolas Wildner

Data de Publicação: 26 de Setembro de 2007

Dentro do Linux, possuimos comandos que eu aprendi, e gosto de chamar de comandos "Coringas". Como assim?

chown = Comando onde eu mudo o Dono/grupo de um Diretório/Arquivo qualquer.

Ótimo. Dentro do Linux também possuimos um comando chamado chgrp que serve para mudar o grupo de uma arquivo/diretório qualquer.

Oras, se eu sei que a sinaxe do chown é:

  chown [opcoes] <dono>:<grupo> <arquivo>

porque precisarei ter em mente 2 comandos decorados, quando 1 deles já me quebra o galho de uma forma monstruosa.

Através desta filosofia, resolvi escrever este artigo sobre o FIND

Muita gente subestima o find, colocando-o como um simples procurador de arquivos, ou utilizam-no apenas para filtrar os arquivos por tamanho e nome, quando na verdade, o find possui muito mais opções do que imaginamos.

Exemplos Simples:

Com o find, podemos procurar arquivos e filtrá-los por extensões, utilizando caracteres chamados de coringas no linux, como o *.

Caso eu queira procurar todos os arquivos de uma determinada extensão em um diretório, como eu faço:

  find . -name "*.tgz"

Pronto, serão listados todos os arquivos com a extensão TGZ dentro do diretório que estou atualmente dentro(isso é definido pelo ponto[.]).

Beleza, mas caso eu queira copiar todos os aquivos da extensão .tgz de dentro de um diretório, utilizando o find? Como? É o find, com uma parametro chamado -exec.

O que é o -exec ?

É um argumento que, para todo o resultado encontrado pelo find, eu executo outro comando, onde passarei logo após o -exec {}.

Como?

Isto. Caso a busca de resultados do find, for verdadeira(TRUE), ele executará o comando escrito após o -exec tantas vezes quanto for necessário, até que o resultado da busca(do find) se esgote.

Exemplo

Estou no meu diretório home, e crio um diretório chamado teste.

  mkdir teste

Agora, quero que, todos os arquivos de extensão .tgz, e que sejam menor que 10 Kilobites, sejam copiados para dentro deste diretório.Isso é algo que parece fácil, e que eu poderia fazer "na mão", mas suponhamos que eu tenha mais de 3.000 arquivos .tgz no meu home(por algum motivo qualquer..hehehhe), e apenas os menores que 10K eu colocarei dentro do diretório teste.....como farei?

  find . -name "*.tgz" -size -10k -exec cp {} teste/ \;

Explicação

o parametro -name "*tgz" irá filtrar qualquer arquivo que tenha a extensão tgz e possua qualquer nome.

o parametro -size -10k, ira procurar por qualquer arquivo MENOR QUE 10k

Dentro do size, podemos colocar -size +10M por exemplo, que ele fará a busca em arquivos maiores que 10Megabites....

Depende da sua necessidade.

Agora sim, o -exec

Bom, como eu havia dito, o -exec irá executar um comando específico, para cada um dos itens encontrados pelo find(por isso o -exec é usado no final)

o -exec cp, irá copiar. Mas copiar o que?

Aí é que entram as chaves{}

Com as chaves {} eu digo, Copie TODO E QUALQUE RESULTADO, vindo do find.

Resumindo,

  -exec cp {} teste/ \;
  -exec cp -> comando a ser executado
  {} -> entrada do CP e SAÍDA do find
  teste/ -> diretório de destino(um dos parametros do CP)
  \; -> fecha o exec.

COPIE todo e qualquer resultado, vindo do FIND(os resultados do find serão todo e qualquer arquivo com extensão .tgz e menor que 10k), para dentro do diretório teste.

Facil não?

Podemos fazer backups com o Find.

Exemplo

  cd /
  mkdir backup
  find $HOME -name "*.doc" -exec cp{} /backup/ \;

Pronto.Todo e qualquer arquivo com extensão .doc será copiado para um diretório chamado /backup.A variável de ambiente $HOME é o meu atual diretório home, e isto cria uma flexibilidade, caso eu salve este comando em um script, e queira que vários usuários o utilizem =)

é isso aí ;)

Veja a relação completa dos artigos de Nícolas Wildner

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 3.01/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1157 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

Expressões Regulares - Uma abordagem divertida 3ª edição