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?
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.
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
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.
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
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"
Pour voir la liste des fichiers au lieu des lignes:
grep -l "chrome" *
ou:
grep -r -l "chrome" .