-exec {} +

1. -exec {} +

Henrique Tavares de Lima
TZQ

(usa Red Hat)

Enviado em 29/06/2018 - 16:49h

Bom Dia/Tarde/Noite

Eu ja havia usado os comandos find e grep juntos utilizando o pipe ( | ) porem sendo um noob em shell estou estudando e vi em um video a seguinte utilizaçao:

find . -type f -iname "*.php" -exec grep "funtion" {} +

O find e o grep ta ok mas gostaria de saber exatamente a funçao do " -exec {} + " pq nao encontrei manual nem --help do comando e muito menos no tio google.

Obrigado a quem puder responder.


  


2. Re: -exec {} +

Fernando
phoemur

(usa Debian)

Enviado em 29/06/2018 - 19:44h

O find substituirá os {} por cada nome de arquivo que ele achar.
O -exec não é um comando do bash mas sim uma opção do find que executa o que você passar substituindo {} pelo nome do arquivo.

A diferença é que
find . -type f -iname "*.php" -exec grep "funtion" {} \+ 

Vai executar apenas um comando grep e colocar o máximo possível de arquivos nos parametros, por exemplo assim hipoteticamente seria o comando que ele manda:

grep "function" arquivo1.php arquivo2.php arquivo3.php ...... arquivo[N].php


Já assim:

find . -type f -iname "*.php" -exec grep "funtion" {} \;


Vai executar um grep para cada arquivo, por exemplo:
grep "function" arquivo1.php
grep "function" arquivo2.php
grep "function" arquivo3.php
........
grep "function" arquivo[N].php

Entendeu?

Se não entendeu:
man find 



3. Re: -exec {} +

Fernando
phoemur

(usa Debian)

Enviado em 29/06/2018 - 19:51h

Outra forma de usar o find seria concatenando com o xargs.
Essa forma tem vantagem de se comportar melhor com caracteres especiais se utilizar a opção -print0

Seria assim:
find . -type f -iname "*.php" -print0 | xargs -0 grep "function" 



4. Re: -exec {} +

Henrique Tavares de Lima
TZQ

(usa Red Hat)

Enviado em 29/06/2018 - 20:46h

Muito Obrigado. Entendi sim


e eu tentando: man -exec, man exec, exec --help, exec -h e nao pensei em ler o find kkkkkkkk.

Vlw.


5. Re: -exec {} +

Fernando
phoemur

(usa Debian)

Enviado em 29/06/2018 - 22:34h

O comando exec existe também... Mas é outra coisa...
É um builtin que funciona baseado na família do execve do C, do header "unistd.h" que é o responsável pela API dos sistemas POSIX....

Porém em shellscript e comandos em geral eu não uso muito para lançar subprocessos...
Eu uso mais para manipular file descriptors.

Por exemplo

exec 9< /proc/meminfo
grep "MemFree" <&9
exec 9<&-


Ou (exagerado de ruim)

#!/bin/bash

exec 9< /proc/meminfo

while read LINE <&9
do
if [ $(grep -o "MemFree" <<< $LINE) ]
then
echo "$(cut -d: -f2 <<< $LINE) de memória livres"
fi
done

exec 9<&-







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts