我每天都会创建目录结构,例如 /数据/ 2018/01/01 /数据/ 2018/01/02 。 。 / data / 2018/02/01像这样。 现在我只需要保留10天,然后删除其余位置。如何使用Unix shell做到这一点?
答案 0 :(得分:1)
find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -print
find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -delete
find /data/2018 -mindepth 2 -maxdepth 2 -type d -ctime +10 -exec rm -rf {} \;
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
。