RHEL 8环境下受限无法使用find命令时,迁移30天以上日志目录的方法咨询
RHEL 8环境下受限无法使用find命令时,迁移30天以上日志目录的方法咨询
嗨,我完全懂你现在的困扰——按天生成的日志目录堆在那,要把30天以上的旧目录挪去别的位置,但公司政策卡着不让用find搭配mv的常规方案,你试的那个ls命令其实还存在逻辑问题,咱们一步步来解决:
首先得说说你尝试的命令哪里不对:
ls -1t | head -5 | xargs -i mv {} another_dir/
ls -1t是按修改时间从新到旧排序,head -5取的是前5个最新的目录,这相当于把刚生成的日志目录移走了,和你要清理旧目录的需求完全相反!就算改成tail取后面的旧目录,这种靠排序取数的方式也不靠谱——如果某天日志目录数量不足5个,或者目录名带空格/特殊字符,xargs很容易出错。
那换个靠谱的思路,不用find,咱们用date和stat结合循环来精准判断并迁移:
步骤1:计算30天前的时间戳
先拿到30天前的epoch时间戳(从1970年到现在的秒数),用来做时间判断的基准:
THRESHOLD=$(date -d "30 days ago" +%s)
步骤2:遍历目录并迁移符合条件的旧目录
写个循环遍历当前目录下的所有子目录,对比每个目录的修改时间戳,小于基准值的就移走:
# 先确保目标目录存在,避免mv报错 mkdir -p another_dir for dir in */; do # 获取目录的修改时间戳 DIR_MTIME=$(stat -c %Y "$dir") # 对比时间,旧于30天就迁移 if [ "$DIR_MTIME" -lt "$THRESHOLD" ]; then echo "正在迁移目录:$dir" mv "$dir" another_dir/ fi done
注意事项
- 先把
mv改成echo mv运行一遍,确认输出的目录都是你要迁移的旧目录,没问题再去掉echo执行实际迁移 - 如果日志目录不在当前目录,把
*/改成具体的路径,比如/path/to/logs/*/ - 这个方法能兼容带空格或特殊字符的目录名,因为用了双引号包裹变量
备注:内容来源于stack exchange,提问作者Shoeb
相关产品推荐
相关产品推荐

