web-dev-qa-db-fra.com

Comment puis-je grep les fichiers cachés?

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?

71
Steven Penny

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.

105
bitmask

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 * .[^.]*
7
insaner

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
3
Olvathar

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
2
Alan

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.

0
mchid

Pour rechercher uniquement dans un certain dossier, vous pouvez utiliser:

ls -al | grep " \."

Commande très simple pour lister et diriger vers grep

0
Jason

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

0
PrashantB

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 {} \;
0
Tyler Christian

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' {} \;
0
nikhilgoel1985