Linux服务器下将子文件夹文件移至主文件夹并处理重名文件
Linux图片文件整理脚本:合并子文件夹图片并自动重命名重复文件
下面是一个可直接使用的bash脚本,实现将photo_folder子目录中的图片移动到主目录,并自动对重名文件进行重命名:
#!/bin/bash # 替换为你的photo_folder实际路径 PHOTO_FOLDER="/path/to/photo_folder" # 需要处理的图片格式,可按需增减 IMAGE_EXTENSIONS=("jpg" "jpeg" "png" "gif" "bmp") # 遍历所有子文件夹 for SUBFOLDER in "$PHOTO_FOLDER"/*/; do [ -d "$SUBFOLDER" ] || continue # 遍历每种图片格式的文件 for EXT in "${IMAGE_EXTENSIONS[@]}"; do for FILE in "$SUBFOLDER"/*."$EXT"; do [ -f "$FILE" ] || continue # 拆分文件名和扩展名 FILENAME=$(basename "$FILE") NAME="${FILENAME%.*}" FILE_EXT="${FILENAME##*.}" # 初始化目标路径 DEST="$PHOTO_FOLDER/$FILENAME" COUNT=1 # 若目标文件已存在,生成新文件名 while [ -f "$DEST" ]; do DEST="$PHOTO_FOLDER/${NAME}_${COUNT}.$FILE_EXT" COUNT=$((COUNT + 1)) done # 移动文件并显示过程 mv -v "$FILE" "$DEST" done done # 移除空的子文件夹(不需要可注释此行) rmdir --ignore-fail-on-non-empty "$SUBFOLDER" done echo "图片整理完成!"
关键说明
- 路径配置:把
PHOTO_FOLDER的值替换为你的图片主文件夹绝对路径,比如/home/ben/photos - 格式支持:
IMAGE_EXTENSIONS数组里可以添加或删除需要处理的图片格式,覆盖常见的图片类型 - 重命名规则:如果主目录已存在同名文件,会自动在文件名后添加
_数字后缀(比如1.jpg→1_1.jpg→1_2.jpg),确保不会覆盖原有文件 - 子文件夹清理:脚本最后会自动删除空的子文件夹,如果子文件夹还有非图片文件,会保留不删除
- 安全提示:建议先在测试文件夹中运行脚本,确认效果符合预期后再处理真实数据
使用步骤
- 将脚本保存为
organize_photos.sh - 赋予执行权限:
chmod +x organize_photos.sh - 运行脚本:
./organize_photos.sh
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

