Je recherche dans un référentiel Git et je souhaite inclure le .git
dossier.
grep
n'inclut pas ce dossier si je cours
grep -r search *
Quelle serait une commande grep pour inclure ce dossier?
Je recherche dans un référentiel Git et je souhaite inclure le .git
dossier.
grep
n'inclut pas ce dossier si je cours
grep -r search *
Quelle serait une commande grep pour inclure ce dossier?
Réponses:
Veuillez vous référer à la solution à la fin de cet article comme une meilleure alternative à ce que vous faites.
Vous pouvez explicitement inclure des fichiers cachés (un répertoire est également un fichier).
grep -r search * .*
Le *
correspondra à tous les fichiers sauf ceux cachés et .*
correspondra uniquement aux fichiers cachés. Cependant, cela échouera s'il n'y a aucun fichier non caché ou aucun fichier caché dans un répertoire donné. Vous pouvez bien sûr ajouter explicitement à la .git
place de .*
.
Cependant, si vous souhaitez simplement rechercher dans un répertoire donné, procédez comme suit:
grep -r search .
Le .
correspondra au chemin actuel, qui comprendra à la fois les fichiers non cachés et cachés.
.*
comprendra le répertoire parent (parce que les ..
matchs)
Je viens de rencontrer ce problème, et sur la base de la réponse de @ bitmask, voici ma simple modification pour éviter le problème signalé par @sehe:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
qu'est-ce que je fais de mal ici?
Peut-être préférerez-vous combiner "grep" avec la commande "find" pour une solution complète comme:
find . -exec grep -Hn search {} \;
Cette commande recherchera dans les fichiers ou répertoires cachés la chaîne "recherche" et listera tous les fichiers avec une coïncidence avec ce format de sortie:
Chemin du fichier: Numéro de ligne: ligne avec coïncidence
./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Vous pouvez utiliser cette approche, en supposant que vous recherchez le répertoire actuel (sinon remplacez. Par le répertoire souhaité):
find . -type f | xargs grep search
ou si vous souhaitez simplement rechercher au niveau supérieur (ce qui est plus rapide à tester si vous les essayez):
find . -type f -maxdepth 1 | xargs grep search
MISE À JOUR: J'ai modifié les exemples en réponse aux commentaires de Scott. J'ai également ajouté "-type f".
~
est le répertoire personnel de l'utilisateur. La question ne concernait pas le répertoire personnel de l'utilisateur, la réponse ne devrait donc pas être mentionnée ~
. (2) Dans une find
commande, -name '*'
est un no-op (c'est-à-dire, cela ne sert à rien).
Pour rechercher UNIQUEMENT tous les fichiers et répertoires cachés à partir de votre emplacement actuel:
find . -name ".*" -exec grep -rs search {} \;
UNIQUEMENT tous les fichiers cachés:
find . -name ".*" -type f -exec grep -s search {} \;
UNIQUEMENT tous les répertoires cachés:
find . -name ".*" -type d -exec grep -rs search {} \;
Pour rechercher uniquement dans un certain dossier, vous pouvez utiliser:
ls -al | grep " \."
C'est une commande très simple pour lister et rediriger vers grep.
En plus de la suggestion de Tyler, voici la commande pour grep tous les fichiers et dossiers de manière récursive, y compris les fichiers cachés
find . -name "*.*" -exec grep -li 'search' {} \;
Pour empêcher la correspondance .
et ..
qui ne sont pas des fichiers cachés, vous pouvez utiliser grep
avec ls -A
comme dans cet exemple:
ls -A | grep "^\."
^\.
déclare que le premier caractère doit être .
La -A
ou --almost-all
option exclut les résultats .
et ..
donc qui sont adaptés les fichiers et répertoires cachés uniquement.
Vous pouvez également rechercher des types spécifiques de fichiers cachés, comme les fichiers de répertoire cachés:
grep -r --include=*.directory "search-string"
Cela peut fonctionner mieux que certaines des autres options. Les autres options qui ont fonctionné peuvent être trop lentes.