如何抓取隐藏文件?

我正在搜索一个 Git 存储库,并希望包括 .git文件夹。

grep does not include this folder if I run

grep -r search *

要包含这个文件夹,grep 命令是什么?

116867 次浏览

请参考这篇文章最后的解决方案,作为你正在做的事情的一个更好的替代方案。

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

grep -r search * .[^.]*

除了隐藏的文件,*将匹配所有文件,而 .[^.]*将只匹配没有 ..的隐藏文件。但是,如果给定目录中没有非隐藏文件或没有隐藏文件,则此操作将失败。当然,您可以显式地添加 .git而不是 .*

但是,如果您只是想在给定的目录中进行搜索,可以这样做:

grep -r search .

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

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

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

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

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

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

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

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

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

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

find . -type f | xargs grep search

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

我刚好遇到了这个问题,基于@bitask 的回答,下面是我为了避免@sehe 指出的问题而做的简单修改:

grep -r search_string * .[^.]*

只搜索当前位置的所有隐藏文件和目录:

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

只有所有隐藏文件:

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

只有所有隐藏目录:

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

只能在某个文件夹中查找:

ls -al | grep " \."

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

为了防止与不是隐藏文件的 ...匹配,您可以像下面的示例一样将 grepls -A一起使用:

ls -A | grep "^\."

^\.指出第一个字符必须是 .

-A--almost-all选项排除结果 ...,以便只匹配隐藏文件和目录。

除了 Tyler 的建议之外,还有一个命令可以递归地对所有文件和文件夹(包括隐藏文件)进行 grep

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

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

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

这种方法可能比其他一些方法更有效,但其他方法可能太慢了。