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: 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 sintaxe do chown
é:
$ chown [opcoes]:
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.
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? É ofind
, 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(dofind
) se esgote.Exemplo
Estou no meu diretório home, e crio um diretório chamado
teste
.$ mkdir testeAgora, 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 meuhome
(por algum motivo qualquer..hehehhe), e apenas os menores que 10K eu colocarei dentro do diretórioteste
.....como farei?$ find . -name "*.tgz" -size -10k -exec cp {} teste/ \;Explicação
O parametro -name
*tgz
irá filtrar qualquer arquivo que tenha a extensãotgz
e possua qualquer nome.O parametro
-size -10k
, ira procurar por qualquer arquivo MENOR QUE 10kDentro 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 pelofind
(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 dofind
.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
.
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í ;)
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