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

Shell脚本实现批量移动超40GB的一级子文件夹到指定子目录

实现脚本

完全可以通过遍历一级子目录的方式扩展原脚本,以下是可直接使用的版本:

#!/bin/bash
# 按需修改以下配置
ANIME_PATH="$HOME/anime"          # anime目录的实际路径
DEST_DIR="$ANIME_PATH/over40gb"   # 大文件夹存放的目标目录
THRESHOLD=40960                   # 阈值,单位MiB,40GiB=40*1024=40960MiB,按十进制40GB算就填40000

# 提前创建目标目录,避免不存在导致mv报错
mkdir -p "$DEST_DIR"

# 遍历anime下所有一级子目录
for dir in "$ANIME_PATH"/*/; do
    # 跳过目标目录本身,防止出现自遍历、自移动的问题
    if [ "$dir" -ef "$DEST_DIR" ]; then
        continue
    fi

    # 统计当前目录大小,提取MiB数值
    current_size=$(du -m -s "$dir" | awk '{print $1}')

    # 大小超过阈值则移动,需要包含刚好40G的场景就把-gt改成-ge
    if [ "$current_size" -gt "$THRESHOLD" ]; then
        mv -- "$dir" "$DEST_DIR/"
    fi
done

关键说明

  • 所有路径都加了双引号,兼容带空格、特殊字符的目录名
  • 用-ef判断目录是否为目标目录本身,比字符串匹配更可靠,避免路径写法不同导致的判断失效
  • mv后面加了--,兼容以横杠开头的特殊目录名
  • 阈值默认采用系统du工具的二进制计算规则(1GiB=1024MiB),如果要按十进制40GB(1GB=1000MB)计算,把THRESHOLD值改为40000即可
  • 如果你需要把大小刚好等于40G的文件夹也移动(和你给出的示例预期一致),把判断条件中的-gt替换为-ge

使用步骤

  • 将上述代码保存为move_over40g.sh文件
  • 给脚本添加可执行权限:chmod +x move_over40g.sh
  • (可选)测试验证:把脚本中mv -- "$dir" "$DEST_DIR/"这行替换为echo "待移动目录: $dir,大小: ${current_size}MiB",先运行一次脚本,核对输出的待移动目录是否符合预期,确认无误后再换回mv命令
  • 正式执行脚本:./move_over40g.sh

内容的提问来源于stack exchange,提问作者Jack Rock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:21:26