Como executar o find -exec?

424

Gostaria de encontrar os arquivos no diretório atual que contêm o texto "chrome".

$ find . -exec grep chrome
find: missing argument to '-exec'

O que estou fazendo de errado?

    
por ripper234 09.05.2011 / 19:35

6 respostas

630

Você perdeu um ; (escapou aqui como \; para impedir que o shell o interprete) ou um + e um {} :

find . -exec grep chrome {} \;

ou

find . -exec grep chrome {} +

find executará grep e substituirá {} pelo (s) nome (s) de arquivo encontrado (s). A diferença entre ; e + é que com ; um único comando grep para cada arquivo é executado enquanto que com + tantos arquivos quanto possível são dados como parâmetros para grep de uma só vez.

    
por 09.05.2011 / 19:39
44

Você não precisa usar find para isso; grep é capaz de manipular a abertura dos arquivos a partir de uma lista glob de tudo no diretório atual:

grep chrome *

... ou até recursivamente para pasta e tudo abaixo dela:

grep chrome . -R
    
por 09.05.2011 / 19:38
16
find . | xargs grep 'chrome'

você também pode fazer:

find . | xargs grep 'chrome' -ls

O primeiro mostra as linhas nos arquivos, o segundo apenas lista os arquivos.

A opção do Caleb é mais limpa, menos pressionamentos de tecla.

    
por 10.05.2011 / 03:20
5

Encontrar é um caminho e você pode tentar the_silver_searcher , então tudo que você precisa fazer é

ag chrome

Ele irá procurar chrome em todos os arquivos (incluindo sub-diretórios) e é mais rápido do que encontrar

    
por 31.05.2016 / 02:25
1

Para ver a lista de arquivos em vez de linhas:

grep -l "chrome" *

ou:

grep -r -l "chrome" .
    
por 14.09.2015 / 17:06
1

Aqui está um exemplo de como eu costumo usar find / exec ...

find  . -name "*.py" -print -exec fgrep hello {} \;

Esta pesquisa recursivamente para todos os arquivos .py, e para cada arquivo imprime (s) fora o nome do arquivo e fgrep para 'hello' on esse (para cada) arquivo. Saída parece como (apenas correu um hoje):

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
    
por 23.08.2017 / 18:02

Tags