使用Find命令删除n天前的目录

5

我的要求与这个问题差不多:Shell脚本删除n天前的目录 我的目录看起来像这样:

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 指向的是实际位置。环境中存在软链接。

你能否请发布一下 find $BASE_DIR -type d -ctime +90 的输出结果?看起来它正在尝试删除的目录已经被删除了,因此无法引用指向它的符号链接。 - jkshah
也许使用“-depth”会有帮助? - shx2
我需要再进行一些测试,但是-depth似乎可以消除这个错误。谢谢! - citsym
2个回答

2

尝试

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

这将仅覆盖$BASE_DIR下直接的目录,但它应该避免生成那个错误消息。


抱歉,我忘了提到我正在使用Korn shell。这是我得到的输出:find: 0652-017 -mindepth不是一个有效的选项。 - citsym
1
我有点担心,如果你不使用mindepth,整个目录可能会被删除!!! - Robin Green

0
find .$BASE_DIR -type d -ctime +90 | sort -r | xargs rm -rf

sort -r会按照相反的顺序对我们的目录进行排序,这样我们就不会尝试删除外部目录然后再删除内部目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接