查找-name中的双引号有什么作用?

时间:2011-01-28 20:09:17

标签: bash find

我对bash中的命令查询有疑问。我正在尝试删除所有名为Cache的目录。

这会找到所有名为“Cache”的目录/文件

find . -name "Cache" -print

但这并没有删除它们,我发现了一堆错误,说“没有这样的文件或目录”。

find . -name "Cache" -exec rm -rf {} \;

但这有效

find . -name Cache -exec rm -rf {} \;

没有空格或任何非字母数字字符。谁能帮我理解发生了什么?谢谢。

4 个答案:

答案 0 :(得分:5)

这与引号无关。你得到“没有这样的文件或目录”的原因是因为该目录正在被删除,但由于你忘了使用-prune,他们进入了。当然,由于它们不再存在,您现在收到错误消息。

find . -name "Cache" -exec rm -rf {} \; -prune

答案 1 :(得分:1)

-depth的{​​{1}}选项有时用于摆脱像这样的操作中的“找不到文件”错误...它强制在目录本身之前处理目录内容。

我没有看到引号如何在你的例子中产生影响。他们是 两个都运行相同的目录配置,或者你尝试过一个(产生错误,还修改目录结构),然后尝试另一个?

答案 2 :(得分:0)

Double Quoting可防止一些Bash扩展。例如,您可以通过

找到所有以 Cache 开头的文件
find . -name "Cache*"

如果要删除双引号,则{B}会扩展Cache*,并且只有当前目录中的Cache个文件匹配。

由于您不使用任何此类字符,因此您无需将seachr术语用双引号括起来。

答案 3 :(得分:0)

-prune旁边,你可能会考虑这种更安全的方法

find . -name "Cache" -exec echo "rm -rf \"{}\"" \; > to_be_deleted.txt

在执行

之前仔细检查to_be_delete.txt
sh to_be_deleted.txt