Linux Shell 脚本:批量处理文件名中的空格与特殊字符
在 Linux 系统中,文件名或目录名中包含空格、括号、逗号等特殊字符,有时会给命令行操作或脚本处理带来不便。本脚本用于批量处理当前目录下的文件与目录名,执行以下标准化操作:
- 将所有空格(包括连续多个空格)替换为单个点号
.。 - 将半角圆括号
(、)、半角方括号[、]以及半角逗号,替换为下划线_。 - 将处理结果中连续出现的多个点号
.或下划线_合并为单个字符。
这样可以使文件名更规范,避免在脚本或命令中因特殊字符导致的问题。
脚本代码
将以下脚本保存为文件(例如 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而非sh:bash是更通用的 Shell,兼容性更好。 - 添加
-r参数:read -r防止反斜杠被解释,提高安全性。 - 跳过当前目录:避免对
.本身进行不必要的处理。 - 合并与优化
sed命令:逻辑更清晰,替换顺序更合理。 - 修正变量名错误:原始脚本中
$na应为$newname。 - 为
mv命令添加引号:确保处理包含空格的新文件名时不会出错。 - 添加完成提示:脚本执行完毕后给出明确提示。
使用方法
- 打开终端,进入需要处理文件的目录。
- 将上述脚本代码保存为
rename_files.sh。 - 运行以下命令赋予脚本执行权限:
chmod +x rename_files.sh - (重要)先进行模拟运行:为了安全起见,可以先注释掉
mv命令(在行首添加#),只查看将要执行的重命名操作:./rename_files.sh - 确认输出无误后,恢复
mv命令并再次运行脚本以实际执行重命名。
警告:批量重命名操作不可逆。请务必在操作前备份重要文件,或在测试目录中确认脚本行为符合预期。