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.