Réponses:
xargs
attend une entrée dans un format qu'aucune autre commande ne produit, il est donc difficile de l'utiliser efficacement. Ce qui ne va pas ici, c'est que vous avez un fichier dont le nom doit être cité en entrée xargs
(contenant probablement un '
).
Si votre grep prend en charge l' option -r
ou -R
pour la 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. Des versions raisonnablement récentes de find
vous 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 {} +
Les versions plus anciennes de find
(sur des 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'aucune citation ne soit requise. De nos jours, seul OpenBSD a cette fonctionnalité sans l'avoir -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Je suppose que tu veux 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 des fichiers qui correspondent
ls -lR | grep "your_search"
Si vous avez les outils GNU (ce que vous faites si la balise Linux est précise), vous pouvez utiliser -print0
et -0
contourner les problèmes de citation habituels:
find . -type f -print0 | xargs -0 grep word
Il existe également un accusé de réception , il est conçu pour ignorer les répertoires spéciaux tels que .svn
, .git
et autres. C'est un outil quotidien pour les développeurs.
C'est assez proche de grep pour les commutateurs communs.
Ex. :
ack -r string .
Package ack-grep
sur Debian et likes Debian.
Dans le répertoire courant, vous pouvez utiliser grep:
grep -irl root .
Je pense que vous voulez trouver une chaîne dans les fichiers
Essayer find . -name "*" | xargs grep -l "string"
/dev/null
. C'est une nuisance lorsque le format de sortie peut varier, en fonction du nombre de fichiers correspondants ... merci.