如何阻止查找打印.git文件夹?

Nat*_*eff 7 find

我有一个find命令,我运行以查找名称包含的文件foo.

我想跳过.git目录.下面的命令可以工作,除非.git在跳过.git目录时打印出令人讨厌的信息:

find . ( -name .git ) -prune -o -name '*foo*'
Run Code Online (Sandbox Code Playgroud)

如何防止跳过的.git目录打印到标准输出?

eMP*_*584 8

所以只是为了更好的可视性

find -name '.git*' -prune -o -name '*foo*' -print
Run Code Online (Sandbox Code Playgroud)

这也省略了.gitignore文件; 注意尾随打印以省略打印,-prune停止下降到它,但没有-print打印它.扭曲的C;


Ton*_*aun 5

find . -not -wholename "./.git*" -name "*foo*"
Run Code Online (Sandbox Code Playgroud)

或者,更严格地说,如果您不想看到 .git/ 但确实想在名称也以 .git 开头的其他目录中搜索 ( .git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*"
Run Code Online (Sandbox Code Playgroud)

如果您的 .git/ 目录不一定总是位于搜索目录的顶层,您将需要使用-not -wholename ".*/.git"-not -wholename ".*/.git/*"

有点奇怪但更有效,因为它会修剪整个.git目录:

find . -not \( -wholename "./.git" -prune \) -name "*foo*"
Run Code Online (Sandbox Code Playgroud)


pet*_*ohn 0

试试这个:

find . -name '*foo*' | grep -v '\.git'
Run Code Online (Sandbox Code Playgroud)

这仍然会遍历到 .git 目录,但不会显示它们。或者您可以结合您的版本:

find . ( -name .git ) -prune -o -name '*foo*' | grep -v '\.git'
Run Code Online (Sandbox Code Playgroud)

您也可以不使用 grep 来完成此操作:

find . ( -name .git ) -prune -printf '' -o -name '*foo*' -print
Run Code Online (Sandbox Code Playgroud)