Shell脚本删除n天以前的目录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我有名为:

2012-12-12
2012-10-12
2012-08-08

我如何使用bash shell脚本删除超过10天的目录?

提问于
用户回答回答于

这将为你递归地执行:

find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;

说明:

  • find:用于查找文件/目录/链接等的unix命令
  • /path/to/base/dir:开始搜索的目录。
  • -type d:只能找到目录
  • -ctime +10:只考虑修改时间超过10天的修改时间
  • -exec ... \;:对于找到的每个此类结果,请执行以下命令 ...
  • rm -rf {}:递归强制删除目录; 该{}部分是查找结果从前一部分代入的位置。

或者,使用:

find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf

哪一个更有效率,因为它等于:

rm -rf dir1 dir2 dir3 ...

而不是:

rm -rf dir1; rm -rf dir2; rm -rf dir3; ...

如在该-exec方法中那样。

用户回答回答于

如果你想删除所有子目录下/path/to/base,例如

/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3

但你不想删除根目录/path/to/base,你必须添加-mindepth 1-maxdepth 1选项,它将只访问下面的子目录/path/to/base

-mindepth 1/path/to/base从比赛中排除根。

-maxdepth 1匹配立即下的子目录/path/to/base,如/path/to/base/dir1/path/to/base/dir2/path/to/base/dir3,但不会列出这些子目录递归的方式。所以这些示例子目录将不会被列出:

/path/to/base/dir1/dir1
/path/to/base/dir2/dir1
/path/to/base/dir3/dir1

等等。

因此,要删除所有/path/to/base超过10天的子目录;

find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf

扫码关注云+社区