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 个文件。"
好记性不如烂键盘---点滴、积累、进步!