Visite também: Currículo ·  Efetividade BR-Mac

O que é LinuxDownload LinuxApostila LinuxEnviar notícia


Como usar o parâmetro exec do comando find para realizar operações com os arquivos

No que diz respeito a realizar operações com um conjunto de arquivos que tenham uma característica em comum (por exemplo, acima de 2GB e dentro de determinado conjunto de diretórios), o find (...) -exec faz chover e faz parar, manda prender e manda soltar. E o artigo do link a seguir o apresenta com exemplos – mas cuidado com os exemplos potencialmente destrutivos, com comandos como rm, mv e chmod: no começo, prefira praticar com comandos mais seguros, como ls e echo… (via linuxaria.com – “» Linuxaria – Everything about GNU/Linux and Open source Linux shell, how to use the exec option in find with examples”)


• Publicado por Augusto Campos em 2012-09-26

Comentários dos leitores

Os comentários são responsabilidade de seus autores, e não são analisados ou aprovados pelo BR-Linux. Leia os Termos de uso do BR-Linux.

    Maicon Vinicius Nunes (usuário não registrado) em 26/09/2012 às 4:57 pm

    Uma prática aconselhável ao usar comandos que executam operações sensíveis em lote com arquivos, como no exemplo find + rm, é adicionar um echo antes do comando principal. Desta forma se tem uma lista precisa dos comandos que serão executados ao rodar pra valer, e pode -se ver se bate com o desejado.

    Leandro Santiago (usuário não registrado) em 26/09/2012 às 8:23 pm

    Não sei, eu não me acostumo a usar o find ou mesmo o xargs pra executar coisas. Sei que, do ponto de vista de desempenho (quem liga pra desempenho quando se usa shell-script?), não é algo bom, mas tenho o custume de usar instruções comuns de linguagens imperativas, tais como for e while.

    No caso, dá pra fazer algo como (creio que seja um bashismo):

    while read p; do faça_alguma_coisa_com “$p”; done < <(find blablabla)

    Isso pq eu sempre me perco com a maneira como o xargs e o find passam parâmetros pros comandos. É uma solução não tão ao estilo "shell-script de ser", mas funciona sempre :-)

    Patola (usuário não registrado) em 26/09/2012 às 8:59 pm

    Dica importante pro -exec: alguns comandos só mostram o nome do arquivo se tiverem como parâmetros mais de um nome de arquivo. Assim, ao usar o -exec, um “macete” é adicionar /dev/null no final pra ele usar como “segundo arquivo”, e.g.:

    find /dir -type f -exec grep abcdef “{}” /dev/null ;

    OBS.: Vejam que o {} expande mesmo dentro de aspas. E isso ainda protege arquivos com espaços.
    OBS. 2: o GNU grep tem o parâmetro -H que sempre imprime o nome do arquivo onde acontece o “match”, mas como o autor desse tutorial disse, algumas vezes você pode estar usando Unixes mais velhos ou corporativos (como AIX e Solaris), sem as ferramentas GNU.

    Patola (usuário não registrado) em 26/09/2012 às 9:00 pm

    OBS.3: Eu já disse que detesto “smart quotes”? O meu exemplo do comentário anterior não vai funcionar se alguém copiar e colar porque as aspas viraram abre-aspas e fecha-aspas… Bleargh.

    Reikainosuke Nekomata (usuário não registrado) em 26/09/2012 às 10:23 pm

    Como eu uso pouco o find desta forma (apesar de ser muito útil), não me lembro direito, mas tenho a impressão de ter usado -execdir ao invés de -exec.

    Igor Cavalcante (usuário não registrado) em 27/09/2012 às 11:42 am

    é uma mão na roda!

Este post é antigo (2012-09-26) e foi arquivado. O envio de novos comentários a este post já expirou.