Je cherche dans un référentiel Git et souhaite inclure le dossier .git
.
grep
n'inclut pas ce dossier si je lance
grep -r search *
Quelle serait une commande grep pour inclure ce dossier?
S'il vous plaît se référer à la solution à la fin de ce post comme une meilleure alternative à ce que vous faites.
Vous pouvez explicitement inclure des fichiers cachés (un répertoire est aussi un fichier).
grep -r search * .*
Le *
correspondra à tous les fichiers sauf les fichiers cachés et .*
ne correspondra qu'aux fichiers cachés. Cependant, cela échouera s'il n'y a pas de fichiers non cachés ou pas de fichiers cachés dans un répertoire donné. Vous pouvez bien sûr explicitement ajouter .git
au lieu de .*
.
Cependant, si vous voulez simplement chercher dans un répertoire donné, procédez comme suit:
grep -r search .
Le .
correspondra au chemin actuel, ce qui inclura les fichiers non cachés et cachés.
Je viens juste de rencontrer ce problème, et basé sur la réponse de @ bitmask, voici ma modification simple pour éviter le problème signalé par @sehe:
grep -r search_string * .[^.]*
Peut-être préférerez-vous combiner "grep" avec la commande "trouver" pour des solutions complètes comme
find . -exec grep -Hn search {} \;
Cette commande recherchera dans les fichiers ou les répertoires cachés la chaîne "search" et répertoriera tous les fichiers coïncidant 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 voudrez peut-être utiliser cette approche:
find ~ -name '*' | xargs grep search
ou si vous voulez juste chercher au plus haut niveau (qui est plus rapide à tester si vous essayez ça):
find ~ -maxdepth 1 -name '*' | xargs grep search
Pour éviter la correspondance de .
et ..
qui ne sont pas des fichiers cachés, vous pouvez utiliser grep
avec ls -A
comme dans cet exemple:
ls -A | grep "^\."
^\.
indique que le premier caractère doit être .
L'option -A
ou --almost-all
exclut les résultats .
et ..
, de sorte que seuls les fichiers et les répertoires masqués correspondent.
Pour rechercher uniquement dans un certain dossier, vous pouvez utiliser:
ls -al | grep " \."
Commande très simple pour lister et diriger vers grep
Toutes les autres réponses sont meilleures. Celui-ci pourrait être facile à retenir:
find . -type f | xargs grep search
Trouve uniquement les fichiers (y compris cachés) et grep chaque fichier
Pour rechercher SEULEMENT dans tous les fichiers et répertoires cachés à partir de votre emplacement actuel:
find . -name ".*" -exec grep -rs search {} \;
SEULEMENT tous les fichiers cachés:
find . -name ".*" -type f -exec grep -s search {} \;
SEULEMENT tous les répertoires cachés:
find . -name ".*" -type d -exec grep -rs search {} \;
En plus de la suggestion de Tyler, voici la commande pour greper tous les fichiers et dossiers de manière récursive, y compris les fichiers cachés.
find . -name "*.*" -exec grep -li 'search' {} \;