web-dev-qa-db-fra.com

Pourquoi grep -r ne cherche-t-il pas également dans les sous-répertoires lorsque je recherche avec un glob?

Grep avec -r ne fonctionnait pas pour moi.

J'ai ensuite fait une situation de test. Le répertoire /home/den/backup contient maintenant un fichier contenant le mot washername__. J'ai également créé un sous-répertoire dans /home/den/backup. Dans ce répertoire, un fichier contient le Word washername__. Les éléments suivants doivent renvoyer deux occurrences à /home/den/backup/great.txt et /home/den/backup/aaa/info.txt

Si je publie

grep -r "washer" /home/den/backup/*.*

le résultat est un coup.

Si je publie

grep -r "washer" /home/den/backup/aaa/*.*

le résultat est un coup.

Le premier n'aurait-il pas dû également trouver le second, qui est dans l'un de ses sous-répertoires?

6
user628388

Vous pouvez voir ce qui se passe ici en mettant le shell en mode débogage à l'aide de set -x

$ set -x
$ grep -r "washer" /home/steeldriver/backup/*.*
+ grep --color=auto -r washer /home/steeldriver/backup/great.txt
washer

c'est-à-dire que le shell développe *.* et correspond au fichier unique great.txt - so grep recherche dans ce fichier unique.

Si vous voulez rechercher récursivement tout répertoire, donnez simplement le répertoire comme argument:

$ grep -r "washer" /home/steeldriver/backup/
+ grep --color=auto -r washer /home/steeldriver/backup/
/home/steeldriver/backup/aaa/info.txt:washer
/home/steeldriver/backup/great.txt:washer

(Vous pouvez désactiver le mode de débogage à l'aide de set +x)

15
steeldriver