4

我的要求与这个问题几乎相同:Shell script to delete directorys older than n days 我的目录如下所示:

Jul 24 05:46 2013_07_24

Jul 31 22:30 2013_08_01

Sep 18 05:43 2013_09_18

Oct 07 08:41 2013_10_07

我想删除任何超过 90 天的内容。基于上述线程中给出的解决方案,我在脚本中使用了以下内容:

find $BASE_DIR  -type d -ctime +90 -exec rm -rf  {} \;

该脚本已成功删除目录,但也因以下错误而失败:

find: 0652-081 cannot change directory to <actual_path>:
  : A file or directory in the path name does not exist.

这里唯一 $BASE_DIR 指向的位置是虚拟位置,错误消息中的 actual_path 指向实际位置。环境中有软链接。

4

2 回答 2

1

尝试

find $BASE_DIR -mindepth 1 -maxdepth 1 -type d -ctime +90 -exec rm -rf  {} \;

这只会覆盖直接在 $BASE_DIR 下的目录,但它应该避免生成该错误消息。

于 2013-11-09T08:08:59.853 回答
0
find .$BASE_DIR -type d -ctime +90 | sort -r | xargs rm -rf

sort -r将以相反的顺序对我们的目录进行排序,因此我们不会尝试先删除外部目录然后再​​删除内部目录。

于 2015-09-20T16:37:15.643 回答