求按单批约1TB总大小分批移动resource子目录的脚本方案
批量移动目录实现方案
前置说明
- 所有操作默认在
/media/date/根目录下执行,正式执行前建议先选2-3个测试目录验证逻辑,避免误操作 - 脚本默认按十进制1TB=1000GB计算批次阈值,如有需要可以自行调整参数
- 不会拆分单个resource目录,若单个目录大小超过1TB,会单独占用一个批次文件夹
可直接使用的Bash脚本
脚本逻辑:先统计所有resource目录的大小,按序累加,达到阈值后自动新建下一批次文件夹,将对应目录移入。
#!/bin/bash # 切换到目标根目录,路径错误则直接退出 cd /media/date/ || exit 1 # 批次大小阈值,单位KB:默认1TB(十进制),如需二进制1TiB请改为1073741824 BATCH_SIZE_KB=1000000000 # 初始化批次和已用空间变量 current_batch=1 current_used_kb=0 batch_dir="${current_batch}-fold" mkdir -p "$batch_dir" # 遍历所有resource开头的一级目录,默认按目录名排序,如需优化空间利用率可在find后加 | sort -h 按大小从小到大排序 find . -maxdepth 1 -type d -name "resource*" | while read -r dir; do dir_name=$(basename "$dir") # 统计当前目录占用大小,单位KB dir_size_kb=$(du -s "$dir_name" | awk '{print $1}') # 累加后超过阈值且当前批次已有内容,则新建下一批次 if [ $((current_used_kb + dir_size_kb)) -gt $BATCH_SIZE_KB ] && [ $current_used_kb -ne 0 ]; then current_batch=$((current_batch + 1)) batch_dir="${current_batch}-fold" mkdir -p "$batch_dir" current_used_kb=0 fi # 移动目录到对应批次文件夹,测试时可将mv改为echo mv预览执行结果 mv "$dir_name" "$batch_dir/" current_used_kb=$((current_used_kb + dir_size_kb)) done
使用步骤
- 将上述脚本内容保存为
/media/date/batch_move.sh - 给脚本添加执行权限:
chmod +x /media/date/batch_move.sh - 测试逻辑:将脚本中
mv "$dir_name" "$batch_dir/"改为echo mv "$dir_name" "$batch_dir/",执行./batch_move.sh预览输出的移动路径是否符合预期 - 确认无误后改回真实mv命令,正式执行脚本即可
自定义调整说明
- 如果你的资源目录命名不是
resource开头,修改find命令中-name "resource*"的匹配规则即可 - 如需调整批次大小,直接修改
BATCH_SIZE_KB参数即可,注意单位为KB
内容的提问来源于stack exchange,提问作者user14417149
相关产品推荐
相关产品推荐

