Stéphane, ma réponse ( -maxdepth 1) était évolutive. Par exemple -maxdepth 2. Je ne sais pas comment décrire la modification que vous avez effectuée en tant que telle.
David Wilkins
il n'atteindra pas @stephane si vous n'utilisez pas @.
Braiam
4
Oui désolé, je suis d'accord que mon montage était trop intrusif. Vous voudrez peut-être encore préciser que ( -maxdepth) n'est pas une syntaxe portable / standard (uniquement GNU et certains BSD). En outre, il est inutile d'utiliser \;ici (exécutez-en un greppar fichier). Utilisez grep -H foo {} +(spécifique à GNU) ou grep foo /dev/null {} +(standard) pour vous assurer que le nom du fichier est toujours imprimé. L'équivalent standard -maxdepth 2seraitfind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas
2
Notez également que le vôtre donnera des messages d'erreur pour les répertoires (y compris .car vous ne donnez pas le -mindepth 1) tandis que GNU grepn'essaiera pas de lire les répertoires avec -r(il revient sur eux). Vous pouvez ajouter un -d skipà grep( en supposant GNU grep) ou mieux ajouter ! -type dà findou encore mieux -type f(ou en -xtype fsupposant GNU find) que vous ne voulez probablement pas greplire les fichiers non réguliers.
Stéphane Chazelas
4
J'ai tendance à utiliser grep -Hincette approche pour que je puisse voir le nom de fichier et la ligne sur laquelle se trouve l'occurrence.
-n
de ne pas récuser du tout.Réponses:
Utiliser
-n
pourno-recurse
:grep
n'est pas récursif par défaut et vous ne devez utiliser l'-r
indicateur que si vous souhaitez effectuer une recherche récursive.Vous pouvez rechercher dans le répertoire actuel
grep
comme suit:la source
Vous pouvez coupler la recherche avec l'argument -exec. Exemple:
Cela peut être mis à l'échelle, c'est-à-dire
-maxdepth 2
la source
-maxdepth 1
) était évolutive. Par exemple-maxdepth 2
. Je ne sais pas comment décrire la modification que vous avez effectuée en tant que telle.-maxdepth
) n'est pas une syntaxe portable / standard (uniquement GNU et certains BSD). En outre, il est inutile d'utiliser\;
ici (exécutez-en ungrep
par fichier). Utilisezgrep -H foo {} +
(spécifique à GNU) ougrep foo /dev/null {} +
(standard) pour vous assurer que le nom du fichier est toujours imprimé. L'équivalent standard-maxdepth 2
seraitfind . -path './*/*' -type d -prune -o -type f -exec ...
.
car vous ne donnez pas le-mindepth 1
) tandis que GNUgrep
n'essaiera pas de lire les répertoires avec-r
(il revient sur eux). Vous pouvez ajouter un-d skip
àgrep
( en supposant GNU grep) ou mieux ajouter! -type d
àfind
ou encore mieux-type f
(ou en-xtype f
supposant GNUfind
) que vous ne voulez probablement pasgrep
lire les fichiers non réguliers.grep -Hin
cette approche pour que je puisse voir le nom de fichier et la ligne sur laquelle se trouve l'occurrence.