博客 / Others/ Linux Shell 脚本:安全批量替换文件名中的空格与特殊字符

Linux Shell 脚本:安全批量替换文件名中的空格与特殊字符

Linux Shell 脚本:安全批量替换文件名中的空格与特殊字符

Linux Shell 脚本:批量处理文件名中的空格与特殊字符

在 Linux 系统中,文件名或目录名中包含空格、括号、逗号等特殊字符,有时会给命令行操作或脚本处理带来不便。本脚本用于批量处理当前目录下的文件与目录名,执行以下标准化操作:

  1. 将所有空格(包括连续多个空格)替换为单个点号 .
  2. 将半角圆括号 ()、半角方括号 [] 以及半角逗号 , 替换为下划线 _
  3. 将处理结果中连续出现的多个点号 . 或下划线 _ 合并为单个字符。

这样可以使文件名更规范,避免在脚本或命令中因特殊字符导致的问题。

脚本代码

将以下脚本保存为文件(例如 rename_files.sh),并赋予执行权限。

#!/bin/bash

# 设置当前目录为工作目录
find . -maxdepth 1 -name "*" -print | while read -r name; do
    # 跳过当前目录本身
    if [ "$name" = "." ]; then
        continue
    fi

    # 执行字符替换
    newname=$(echo "$name" | 
        sed 's/s+/./g' | 
        sed 's/[(,)]/_/g' | 
        sed 's/[/_/g' | 
        sed 's/]/_/g' | 
        sed 's/.{2,}/./g' | 
        sed 's/_{2,}/_/g')

    # 如果新旧名称不同,则执行重命名
    if [ "$name" != "$newname" ]; then
        echo "mv "$name" "$newname""
        mv "$name" "$newname"
    fi
done

echo "重命名完成。"

脚本说明与改进

与原始脚本相比,此版本进行了以下优化与修正:

  • 使用 bash 而非 shbash 是更通用的 Shell,兼容性更好。
  • 添加 -r 参数read -r 防止反斜杠被解释,提高安全性。
  • 跳过当前目录:避免对 . 本身进行不必要的处理。
  • 合并与优化 sed 命令:逻辑更清晰,替换顺序更合理。
  • 修正变量名错误:原始脚本中 $na 应为 $newname
  • mv 命令添加引号:确保处理包含空格的新文件名时不会出错。
  • 添加完成提示:脚本执行完毕后给出明确提示。

使用方法

  1. 打开终端,进入需要处理文件的目录。
  2. 将上述脚本代码保存为 rename_files.sh
  3. 运行以下命令赋予脚本执行权限:
    chmod +x rename_files.sh
  4. (重要)先进行模拟运行:为了安全起见,可以先注释掉 mv 命令(在行首添加 #),只查看将要执行的重命名操作:
    ./rename_files.sh
  5. 确认输出无误后,恢复 mv 命令并再次运行脚本以实际执行重命名。

警告:批量重命名操作不可逆。请务必在操作前备份重要文件,或在测试目录中确认脚本行为符合预期。

发表评论

您的邮箱不会公开。必填项已用 * 标注。