Zombo
Zombo

Reputation: 1

How can I grep hidden files?

I am searching through a Git repository and would like to include the .git folder.

grep does not include this folder if I run

grep -r search *

What would be a grep command to include this folder?

Upvotes: 135

Views: 135729

Answers (10)

Pyetro
Pyetro

Reputation: 185

To search hidden files from the current folder non-recursively

find . -maxdepth 1 -name '.*' -type f -exec grep -ls 'search text' {} \;

To search hidden files from the current folder recursively

find . -name '.*' -type f -exec grep -ls 'search text' {} \;

Upvotes: 0

bitmask
bitmask

Reputation: 34644

Please refer to the solution at the end of this post as a better alternative to what you're doing.

You can explicitly include hidden files (a directory is also a file).

grep -r search * .[^.]*

The * will match all files except hidden ones and .[^.]* will match only hidden files without ... However this will fail if there are either no non-hidden files or no hidden files in a given directory. You could of course explicitly add .git instead of .*.

However, if you simply want to search in a given directory, do it like this:

grep -r search .

The . will match the current path, which will include both non-hidden and hidden files.

Upvotes: 179

mYnDstrEAm
mYnDstrEAm

Reputation: 789

You can also search for specific types of hidden files like so for hidden directory files:

grep -r --include=*.directory "search-string"

This may work better than some of the other options. The other options that worked can be too slow.

Upvotes: -1

DEs
DEs

Reputation: 83

In addition to Tyler's suggestion, Here is the command to grep all files and folders recursively including hidden files

find . -name "*.*" -exec grep -li 'search' {} \;

Upvotes: 2

Alan
Alan

Reputation: 2178

You may want to use this approach, assuming you're searching the current directory (otherwise replace . with the desired directory):

find . -type f | xargs grep search

or if you just want to search at the top level (which is quicker to test if you're trying these out):

find . -type f -maxdepth 1 | xargs grep search

UPDATE: I modified the examples in response to Scott's comments. I also added "-type f".

Upvotes: 2

user10369828
user10369828

Reputation:

To find only within a certain folder you can use:

ls -al | grep " \."

It is a very simple command to list and pipe to grep.

Upvotes: 1

PrashantB
PrashantB

Reputation: 319

All the other answers are better. This one might be easy to remember:

find . -type f | xargs grep search

It finds only files (including hidden) and greps each file.

Upvotes: 2

Olvathar
Olvathar

Reputation: 551

Perhaps you will prefer to combine "grep" with the "find" command for a complete solution like:

find . -exec grep -Hn search {} \;

This command will search inside hidden files or directories for string "search" and list any files with a coincidence with this output format:

File path:Line number:line with coincidence

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

Upvotes: 5

Tyler Christian
Tyler Christian

Reputation: 530

To search within ONLY all hidden files and directories from your current location:

find . -name ".*" -exec grep -rs search {} \;

ONLY all hidden files:

find . -name ".*" -type f -exec grep -s search {} \;

ONLY all hidden directories:

find . -name ".*" -type d -exec grep -rs search {} \;

Upvotes: 3

insaner
insaner

Reputation: 1705

I just ran into this problem, and based on @bitmask's answer, here is my simple modification to avoid the problem pointed out by @sehe:

grep -r search_string * .[^.]*

Upvotes: 19

Related Questions