我正在使用亚马逊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