112

我正在搜索 Git 存储库并希望包含该.git文件夹。

grep如果我运行,则不包括此文件夹

grep -r search *

包含此文件夹的 grep 命令是什么?

4

10 回答 10

152

请参阅本文末尾的解决方案,作为您正在做的更好的选择。

您可以显式包含隐藏文件(目录也是文件)。

grep -r search * .[^.]*

*匹配除隐藏文件之外的所有文件,并且.[^.]*仅匹配没有... 但是,如果给定目录中没有非隐藏文件或没有隐藏文件,这将失败。您当然可以显式添加.git而不是.*.

但是,如果您只是想在给定目录中搜​​索,请执行以下操作:

grep -r search .

.匹配当前路径,该路径将包括非隐藏文件和隐藏文件。

于 2012-04-29T20:28:21.887 回答
16

我刚刚遇到了这个问题,根据@bitmask的回答,这是我的简单修改,以避免@sehe指出的问题:

grep -r search_string * .[^.]*
于 2016-10-31T21:54:10.680 回答
4

也许您更愿意将“grep”与“find”命令结合使用以获得完整的解决方案,例如:

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

此命令将在隐藏文件或目录中搜索字符串“search”并列出与此输出格式重合的所有文件:

文件路径:行号:重合行

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
于 2014-02-10T13:45:24.827 回答
2

您可能想要使用这种方法,假设您正在搜索当前目录(否则将 . 替换为所需目录):

find . -type f | xargs grep search

或者如果您只想在顶层搜索(如果您正在尝试这些,测试起来会更快):

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

更新:我修改了示例以回应 Scott 的评论。我还添加了“-type f”。

于 2014-02-13T16:49:05.900 回答
2

为了防止匹配.并且..哪些不是隐藏文件,您可以在此示例中使用grepwith ls -Alike:

ls -A | grep "^\."

^\.声明第一个字符必须是.

-Aor--almost-all选项排除结果,.因此..仅匹配隐藏的文件和目录。

于 2019-07-25T00:35:30.913 回答
1

要仅在某个文件夹中查找,您可以使用:

ls -al | grep " \."

这是一个非常简单的命令来列出和管道到 grep。

于 2018-09-16T05:06:46.570 回答
1

所有其他答案都更好。这个可能很容易记住:

find . -type f | xargs grep search

它只查找文件(包括隐藏文件)并 greps 每个文件。

于 2015-10-12T07:05:57.537 回答
1

除了泰勒的建议,这里是递归地grep所有文件和文件夹的命令,包括隐藏文件

find . -name "*.*" -exec grep -li 'search' {} \;
于 2019-08-07T00:57:05.973 回答
1

仅在您当前位置的所有隐藏文件和目录中搜索:

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

仅所有隐藏文件:

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

仅所有隐藏目录:

find . -name ".*" -type d -exec grep -rs search {} \;
于 2018-02-08T17:41:07.547 回答
-1

您还可以搜索特定类型的隐藏文件,例如隐藏目录文件:

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

这可能比其他一些选项更有效。其他有效的选项可能太慢了。

于 2020-07-16T10:22:55.347 回答