Unix 查找命令忽略丢失的文件或目录



我有一个小命令,可以删除~/Library/Cache~/Library/Logs/Library/Cache/Library/Logs目录中的所有文件,但有时,一个或多个目录丢失并且rm -rf命令不会执行。

sudo find ~/Library/Caches ~/Library/Logs /Library/Caches /Library/Logs -mindepth 1 -type f -exec rm -rf {}+

我希望该命令忽略丢失的目录,只对找到的文件执行命令。

这里唯一的问题是您对看到有关缺少目录的错误消息感到恼火。

您可以将标准错误流重定向到/dev/null以忽略错误:

sudo find ~/Library/Caches ~/Library/Logs 
/Library/Caches  /Library/Logs 
-mindepth 1 -type f -exec rm -rf {} + 2>/dev/null

另请注意,这里不需要-mindepth 1,并且某些find实现具有-delete

sudo find ~/Library/Caches ~/Library/Logs 
/Library/Caches  /Library/Logs 
-type f -delete 2>/dev/null

或者,使用理解大括号扩展的外壳:

sudo find {~,}/Library/{Logs,Caches} -type f -delete 2>/dev/null

最新更新