#!/bin/bash
# 原始文件夹路径
source_folder="./source"
# 目标文件夹的基本路径
target_folder_base="./target_folder"
# 每个文件夹的大小限制(以MB为单位)
max_size_mb=70
# 将MB转换为字节
max_size=$((max_size_mb*1024*1024))
# 目标文件夹索引和当前大小初始化
target_index=1
current_size=0
# 创建第一个目标文件夹
mkdir -p "${target_folder_base}_${target_index}"
# 遍历原始文件夹中的文件
find "$source_folder" -type f -print0 | while IFS= read -r -d $'\0' file; do
# 获取当前文件的大小
file_size=$(du -b "$file" | cut -f1)
# 预测添加当前文件后的总大小
new_size=$((current_size + file_size))
# 检查预测的大小是否超过限制
if [ $new_size -gt $max_size ]; then
# 更新目标文件夹索引
target_index=$((target_index + 1))
current_size=0
# 创建新的目标文件夹
mkdir -p "${target_folder_base}_${target_index}"
fi
# 构建目标路径,保持原始子目录结构
target_path="${target_folder_base}_${target_index}$(dirname "$file" | sed "s#$source_folder##")"
# 创建目标路径
mkdir -p "$target_path"
# 移动文件到目标路径
mv "$file" "$target_path/"
# 更新当前目标文件夹的大小
current_size=$((current_size + file_size))
done
echo "Files have been distributed into ${target_index} folders."
该代码需要放到shell文件中
#可以使用nano创建文件
nano script.sh
#写入内容后 Ctrl +o来保存文件然后输入enter确认,接着使用Ctrl +x退出
给脚本添加执行权限
chmod +x script.sh
执行脚本
./script.sh