Ferramentas Pessoais
Você está aqui: Página Inicial Dicas FIND, muito mais que um "procurador de arquivos

FIND, muito mais que um "procurador de arquivos


Colaboração: Nícolas Wildner


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.


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


Fonte: www.dicas-l.com.br