xargs
attend une entrée dans un format qu'aucune autre commande ne produit, il est donc difficile à utiliser efficacement. Ce qui ne va pas ici, c'est que vous avez un fichier dont le nom doit être cité en entrée de xargs
(contenant probablement un '
).
Si votre grep prend en charge le -r
ou -R
option de recherche récursive, utilisez-la.
grep -r word .
Sinon, utilisez le -exec
primaire de find
. C'est la manière habituelle d'obtenir le même effet que xargs
, sauf sans contraintes sur les noms de fichiers. Versions raisonnablement récentes de find
permettent de regrouper plusieurs fichiers en un seul appel à la commande auxiliaire. Passer /dev/null
à grep
garantit qu'il affichera le nom du fichier devant chaque correspondance, même s'il est appelé sur un seul fichier.
find . -type f -exec grep word /dev/null {} +
Anciennes versions de find
(sur les systèmes plus anciens ou OpenBSD, ou des utilitaires réduits tels que BusyBox) ne peuvent appeler la commande auxiliaire que sur un fichier à la fois.
find . -type f -exec grep word /dev/null {} \;
Certaines versions de find
et xargs
ont des extensions qui leur permettent de communiquer correctement, en utilisant des caractères nuls pour séparer les noms de fichiers afin qu'aucun guillemet ne soit requis. De nos jours, seul OpenBSD a cette fonctionnalité sans avoir -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Je suppose que vous voulez dire la première option
grep récursif, pour rechercher du contenu dans des fichiers
grep -R "content_to_search" /path/to/directory
ls récursif, pour rechercher les fichiers qui correspondent
ls -lR | grep "your_search"
Si vous avez les outils GNU (ce que vous faites si la balise Linux est exacte), vous pouvez utiliser -print0
et -0
pour contourner les problèmes habituels de cotation :
find . -type f -print0 | xargs -0 grep word