linux/ubuntu下一个文件夹里面文件太多打不开,用脚本分成一个个小文件夹

python

"""
功能:把大文件目录分成几个小文件
"""
import os
import shutil
import random

path_dir = "/media/0001_data/"
T_nums = 2000

files = os.listdir(path_dir)
# random.shuffle(files)

for cnt, file in enumerate(files):
    print(cnt, file)
    path_file = os.path.join(path_dir, file)
    div_ = int(cnt / T_nums)
    if div_ < 1:
        continue

    # div_ += 50  ###################

    dir_name = path_dir.split("/")[-2]
    dir_name_div = dir_name + "_" + str(div_)
    base_path = os.path.dirname(os.path.dirname(path_dir))
    dir_new = os.path.join(base_path, dir_name_div)
    if not os.path.exists(dir_new):
        os.makedirs(dir_new)
    shutil.move(path_file, dir_new)

shell

运行需要bash xxx.sh

#!/bin/bash

# 定义源文件夹和目标文件夹(使用绝对路径)
src_dir="/media/0001_data"
dest_dir="/media/0001_data_split"

# 检查源文件夹是否存在
if [ ! -d "$src_dir" ]; then
    echo "源文件夹不存在:$src_dir"
    exit 1
fi

# 检查目标根文件夹
if [ -z "$dest_dir" ]; then
    echo "目标文件夹路径未设置。"
    exit 1
fi

# 创建目标根文件夹(如果不存在)
mkdir -p "$dest_dir" || {
    echo "无法创建目标根文件夹:$dest_dir"
    exit 1
}

# 初始化计数器
folder_index=1
file_count=0
max_files_per_folder=2000

# 遍历源文件夹中的所有文件
for file in "$src_dir"/*; do
    # 检查文件是否存在
    if [ ! -f "$file" ]; then
        echo "跳过无效文件:$file"
        continue
    fi

    # 创建新的子文件夹
    if (( file_count % max_files_per_folder == 0 )); then
        current_folder="$dest_dir/folder_$folder_index"
        mkdir -p "$current_folder" || {
            echo "无法创建子文件夹:$current_folder"
            exit 1
        }
        echo "创建新文件夹:$current_folder"
        ((folder_index++))
    fi

    # 移动文件
    mv "$file" "$current_folder" || {
        echo "无法移动文件:$file 到 $current_folder"
        exit 1
    }
    ((file_count++))
done

echo "文件整理完成,总共创建了 $((folder_index-1)) 个文件夹,移动了 $file_count 个文件。"

posted @ 2024-12-03 11:15  无左无右  阅读(1)  评论(0编辑  收藏  举报