você está aqui: Home  → Arquivo de Mensagens

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

 

 

Opinião dos Leitores

adrian
18 Ago 2017, 11:56
gostei muito, adorei, amo todos voces, beijos
William Gigliozzi
04 Nov 2014, 11:33
O artigo é MUITO BOM! Explica em detalhes como executar os comandos. Fiz um script usando os conceitos apresentados neste tutorial.

PARABÉNS!
William
*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