使用 find 删除目录时出现“没有这样的文件或目录”

使用 find 删除目录时出现“没有这样的文件或目录”

我正在使用亚马逊Linux。我有这样的语句,旨在删除目录中的文件

/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;

但这会导致一堆这样的语句

/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment2b6836209f40596a': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment1fae3ca49edb3384': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deploymenta2b0c99bfdd7f444': No such file or directory
...

有没有办法让我的语句不扫描不存在的文件,或者至少消除所有这些错误?

答案1

请注意,您的命令会删除一天内未更改的目录,即使其中的某些文件最近已更改。

假设这就是你想要的,斯蒂芬·查泽拉斯特里格在评论中提出了两种解决方案。您面临的问题是您指示find删除一个目录,然后它尝试遍历该目录以查看其中是否有任何匹配的文件。

  • 传递-depth告诉find首先处理目录的内容,最后处理目录本身。这会浪费一些时间来分析稍后将被删除的目录的内容。

    find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -exec rm -rf {} \;
    
  • 用于-prune指示find不要浏览正在删除的目录。

    find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \; -prune
    

如果您只想删除旧文件,请find告知。您可以使用-delete而不是调用rm.

find $JBOSS_HOME/standalone/tmp/vfs -mmin +1441 -type f -delete

然后您可以删除空目录:

find -depth $JBOSS_HOME/standalone/tmp/vfs -type d -empty -delete

或者将两者结合起来,在删除目录中应删除的任何文件后删除目录:

find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -type f -delete -o -type d -empty -delete

相关内容