我有一个find命令,我运行以查找名称包含的文件foo.
我想跳过.git目录.下面的命令可以工作,除非它.git在跳过.git目录时打印出令人讨厌的信息:
find . ( -name .git ) -prune -o -name '*foo*'
Run Code Online (Sandbox Code Playgroud)
如何防止跳过的.git目录打印到标准输出?
所以只是为了更好的可视性
find -name '.git*' -prune -o -name '*foo*' -print
Run Code Online (Sandbox Code Playgroud)
这也省略了.gitignore文件; 注意尾随打印以省略打印,-prune停止下降到它,但没有-print打印它.扭曲的C;
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)
试试这个:
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)