Comment faire une recherche max-depth dans ack et grep?


32

Existe-t-il un moyen de dire ackde rechercher uniquement du texte dans le dossier actuel? (ou spécifier un max-depthniveau?) Et avec grep?


1
Non, ack n'a pas d'option de profondeur maximale, à l'exception -nde ne pas récuser du tout.
Andy Lester

Réponses:


22

Utiliser -npour no-recurse:

$ ack -n foo

grepn'est pas récursif par défaut et vous ne devez utiliser l' -rindicateur que si vous souhaitez effectuer une recherche récursive.

Vous pouvez rechercher dans le répertoire actuel grepcomme suit:

$ grep -- foo *

13
Ne répond pas à la question? (et si je veux revenir à une profondeur de 2)
Steven Lu

Bon point, j'ai raté ça. Aucune suggestion?
Eric Wilson

29

Vous pouvez coupler la recherche avec l'argument -exec. Exemple:

find . -maxdepth 1 -exec grep foo {} \;

Cela peut être mis à l'échelle, c'est-à-dire -maxdepth 2


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.
GDP2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.