gpt4 book ai didi

bash - 为什么我的 `find` 命令给出与忽略目录相关的错误?

转载 作者:行者123 更新时间:2023-11-29 08:56:21 30 4
gpt4 key购买 nike

我有这个查找命令:

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' 的顺序并首先检查名称,因为查询大小需要第二次系统调用。
  • 它可以计算目录的硬链接(hard link)以确定子目录的数量,当它看到所有硬链接(hard link)时,它不再需要检查它们是否为 -type d 或递归。
  • 它甚至可以重写 (-B -or -C) -and -A 这样,如果检查的成本相同且没有副作用,则 -A将首先进行评估,希望在 1 次而不是 2 次测试后拒绝文件。

但是,它还不够聪明,无法意识到 -not -path '*/.git/*' 意味着如果你找到一个目录 .git 然后你甚至不需要递归到它,因为里面的所有文件都将无法匹配。

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

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

关于bash - 为什么我的 `find` 命令给出与忽略目录相关的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239050/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com