【发布时间】:2012-04-29 20:25:12
【问题描述】:
我正在搜索一个 Git 存储库,并希望包含 .git 文件夹。
grep 如果我运行则不包含此文件夹
grep -r search *
包含此文件夹的 grep 命令是什么?
【问题讨论】:
标签: grep hidden-files dotfiles
我正在搜索一个 Git 存储库,并希望包含 .git 文件夹。
grep 如果我运行则不包含此文件夹
grep -r search *
包含此文件夹的 grep 命令是什么?
【问题讨论】:
标签: grep hidden-files dotfiles
请参阅本文末尾的解决方案,作为您正在做的更好的替代方案。
您可以显式包含隐藏文件(目录也是文件)。
grep -r search * .[^.]*
* 将匹配除隐藏文件之外的所有文件,.[^.]* 将仅匹配没有.. 的隐藏文件。但是,如果给定目录中没有非隐藏文件或没有隐藏文件,这将失败。您当然可以显式添加 .git 而不是 .*。
但是,如果您只是想在给定目录中搜索,请这样做:
grep -r search .
. 将匹配当前路径,其中包括非隐藏文件和隐藏文件。
【讨论】:
.* 将包含父目录(因为.. 匹配)
*.go 文件中grep 字符串"func foobar(" 的正确命令是什么,包括隐藏子目录中的文件?
我刚遇到这个问题,根据@bitmask的回答,为了避免@sehe指出的问题,这里是我的简单修改:
grep -r search_string * .[^.]*
【讨论】:
sudo grep -r ANDROID_HOME * .[^.]*我在这里做错了什么?
也许您更喜欢将“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
【讨论】:
假设您正在搜索当前目录(否则将 . 替换为所需目录),您可能希望使用这种方法:
find . -type f | xargs grep search
或者如果您只是想在顶层搜索(如果您正在尝试这些会更快地进行测试):
find . -type f -maxdepth 1 | xargs grep search
更新:我修改了示例以响应 Scott 的 cmets。我还添加了“-type f”。
【讨论】:
~ 是用户的主目录。问题与用户的主目录无关,因此答案不应提及~。 (2)Inafind 命令,-name '*' 是无操作(即没有任何用途)。
为防止匹配不是隐藏文件的. 和..,您可以使用grep 和ls -A,如下例所示:
ls -A | grep "^\."
^\. 声明第一个字符必须是.
-A 或 --almost-all 选项会排除结果 . 和 ..,以便仅匹配隐藏的文件和目录。
【讨论】:
仅在您当前位置的所有隐藏文件和目录中搜索:
find . -name ".*" -exec grep -rs search {} \;
仅限所有隐藏文件:
find . -name ".*" -type f -exec grep -s search {} \;
仅限所有隐藏目录:
find . -name ".*" -type d -exec grep -rs search {} \;
【讨论】:
所有其他答案都更好。这个可能很容易记住:
find . -type f | xargs grep search
它只查找文件(包括隐藏文件)并 greps 每个文件。
【讨论】:
要仅在某个文件夹中查找,您可以使用:
ls -al | grep " \."
这是一个非常简单的命令来列出和管道到 grep。
【讨论】:
除了 Tyler 的建议,这里是递归 grep 所有文件和文件夹的命令,包括隐藏文件
find . -name "*.*" -exec grep -li 'search' {} \;
【讨论】:
您还可以搜索特定类型的隐藏文件,例如隐藏目录文件:
grep -r --include=*.directory "search-string"
这可能比其他一些选项效果更好。其他可行的选项可能太慢了。
【讨论】:
--include=*.directory 应该做什么 - 我的所有目录都不是以 .directory 结尾的吗?
.git,或者一般包括隐藏目录