web-dev-qa-db-fra.com

Comment exécuter find -exec?

Je voudrais trouver les fichiers dans le répertoire courant qui contiennent le texte "chrome".

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

Qu'est-ce que je fais mal?

538
ripper234

Vous avez manqué un ; (échappé ici sous le nom de \; pour empêcher le shell de l'interpréter) ou + et un {}:

find . -exec grep chrome {} \;

ou

find . -exec grep chrome {} +

find exécutera grep et remplacera {} avec le ou les noms de fichiers trouvés. La différence entre ; et + c'est qu'avec ; une seule commande grep pour chaque fichier est exécutée alors qu'avec + autant de fichiers que possible sont donnés en tant que paramètres à grep à la fois.

801
bmk

Vous n'avez pas du tout besoin d'utiliser find; grep est capable de gérer l'ouverture des fichiers soit à partir d'une liste globale de tout dans le répertoire courant:

grep chrome *

... ou même récursivement pour le dossier et tout ce qu'il contient:

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

vous pouvez aussi faire:

find . | xargs grep 'chrome' -ls

Le premier vous montre les lignes dans les fichiers, le second liste simplement les fichiers.

L'option de Caleb est plus nette, moins de frappes.

20
Mathew

La recherche est un moyen et vous pouvez essayer the_silver_searcher alors tout ce que vous devez faire est

ag chrome

Il recherchera chrome dans tous les fichiers (inclure les sous-répertoires) et il est plus rapide que de trouver

7
Ask and Learn

Voici un exemple de la façon dont j'utilise habituellement find/exec ...

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

Cela recherche récursivement tous les fichiers .py et pour chaque fichier, imprime le nom du fichier et les fgrep pour "bonjour" sur ce (pour chaque) fichier. La sortie ressemble (j'en ai lancé une aujourd'hui):

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
5
jon

Pour voir la liste des fichiers au lieu des lignes:

grep -l "chrome" *

ou:

grep -r -l "chrome" .
3
mateusz.szymborski