bash – 为什么我的`find`命令给出了与被忽略的目录有关的错误?

我有这个find命令:
find . -type f  -not -path '**/.git/**' -not -path '**/node_modules/**'  | xargs sed -i '' s/typescript-library-skeleton/xxx/g;

出于某种原因,它给了我这些警告/错误

find: ./.git/objects/3c: No such file or directory
find: ./.git/objects/3f: No such file or directory
find: ./.git/objects/41: No such file or directory

我甚至尝试过使用:

-not -path '**/.git/objects/**'

得到了同样的事情.有人知道为什么find在.git目录中搜索?看起来很奇怪.

why is the find searching in the .git directory?

GNU find非常聪明,并且在一个简单的实现上支持several optimizations

>它可以翻转-size 512b -name’* .txt’的顺序并首先检查名称,因为查询大小将需要第二个系统调用.
>它可以计算目录的硬链接以确定子目录的数量,并且当它看到所有它时,没有longers需要检查它们的-type d或递归.
>它甚至可以重写(-B -or -C)-and -A,这样如果检查成本相同且没有副作用,-A将首先进行评估,希望在1次测试后拒绝该文件,而不是2次.

但是,还不够聪明才能意识到-not -path’* /.git / *’意味着如果你找到一个目录.git然后你甚至不需要递归到它,因为里面的所有文件都将失败比赛.

相反,它尽职尽责地递归,找到每个文件并将其与模式匹配,就好像它是一个黑盒子一样.

要明确告诉它完全跳过目录,您可以使用-prune.见How to exclude a directory in find . command

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...