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?

Amelio Vazquez-Reina
la source
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 *
Eric Wilson
la source
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

David Wilkins
la source
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