在linux环境下使用shell将文件夹下文件移动到多个文件夹下,限制文件夹大小

#!/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

你可能感兴趣的:(linux,运维,服务器)