清除目录,以yyyy / mm / dd分隔

时间:2018-12-24 12:20:56

标签: bash unix

我每天都会创建目录结构,例如 /数据/ 2018/01/01 /数据/ 2018/01/02 。 。 / data / 2018/02/01像这样。 现在我只需要保留10天,然后删除其余位置。如何使用Unix shell做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您确实确定每天都会创建文件夹,则可以使用ctime:

在使用delete或exec rm -rf命令之前,可以先使用-print,以确保一切正常:

find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -print

如果一切正常,然后单击删除:

find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -delete

OR by'-exec rm -rf'

find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -exec rm -rf {} \;

如果您认为我希望删除具有更好概述的文件夹,那么我想提供另一个示例,请编辑XX,以便从第11天起删除多少天。

for days in {11..XX}; do rm -rf $(date --date "$days days ago" "+%Y%m%d");done|sed 's/./&\//4'|sed 's/./&\//7'|sed 's/^/\/data\//g'
  

输出:

removed directory  '/data/2018/12/14'
removed directory  '/data/2018/12/13'
removed directory  '/data/2018/12/12'
removed directory  '/data/2018/12/11'
removed directory  '/data/2018/12/10'
removed directory  '/data/2018/12/09'
removed directory  '/data/2018/12/08'
removed directory  '/data/2018/12/07'
removed directory  '/data/2018/12/06'
.......

答案 1 :(得分:0)

尝试一下

find /data -mindepth 3 -maxdepth 3 -type d | sort | head -n -10 | xargs -r -d '\n' rm -rf

这将列出/data下的所有第3级目录,并对其进行最早排序,然后从排序后的列表中删除最后10个条目,然后将它们传递给rm -rf,因此它们都是删除。

建议在继续操作之前,先检查输出的内容是否不含最后| xargs rm -rf