besoin de rechercher quelque chose dans tout le contenu
J'essaie:
find . | xargs grep word
Je reçois une erreur:
xargs: citation non terminée
Comment y parvenir?
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
/dev/null
. C'est une nuisance lorsque le format de sortie peut varier, en fonction du nombre de fichiers correspondants ... merci.Je suppose que tu veux dire la première option
grep récursif, pour rechercher du contenu dans des fichiers
ls récursif, pour rechercher des fichiers qui correspondent
la source
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:la source
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. :
Package
ack-grep
sur Debian et likes Debian.la source
Dans le répertoire courant, vous pouvez utiliser grep:
la source
Je pense que vous voulez trouver une chaîne dans les fichiers
Essayer
find . -name "*" | xargs grep -l "string"
la source