You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:12:56