2011-01-28 79 views
1

我有一个关于在bash中查找命令的问题。我正在尝试删除所有名为Cache的目录。find -name中的双引号是什么?

此找到所有的目录/文件名为“缓存”

find . -name "Cache" -print 

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

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

但这个工程

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

没有空格或任何非字母数字字符。任何人都可以帮助我理解发生了什么?谢谢。

+5

我不相信你之前考虑这个更安全的方法

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

仔细检查to_be_delete.txt。 – DigitalRoss 2011-01-28 20:10:52

+0

@数字:同意。第二个和第三个代码给出任何不同的结果是完全不可能的。 – Philipp 2011-01-28 20:21:31

+1

@DigitalRoss也许,在第二次运行中,他已经删除了一切,因此没有错误。 – 2011-01-28 20:31:53

回答

5

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

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

这正是发生了什么......谢谢! – 2011-01-28 20:27:52

1

-depth选项find有时被用来在这样的操作摆脱了“找不到文件”的错误......它迫使目录内容目录本身之前进行处理。

我不明白引号会如何影响您的示例。他们 是否都针对相同的目录配置运行,或者您是否尝试了一个(产生错误并修改目录结构),然后尝试另一个?

0

双引号可以防止某些Bash扩展。例如,你可以找到所有文件通过

find . -name "Cache*" 

缓存开始,如果您删除双引号,Cache*将被Bash得到扩展,只有Cache文件在当前目录下会匹配。

既然你不使用任何这样的字符,你不需要用双引号包装seachr的术语。

0

-prune,你大概可以做

sh to_be_deleted.txt 
相关问题