54 lines
1.4 KiB
Bash
54 lines
1.4 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# 文件名替换脚本:将文件名中的 hoistwork 替换为 breakground
|
||
|
# 用法:./rename_script.sh /目标/目录/路径
|
||
|
|
||
|
# 检查是否提供了目录参数
|
||
|
if [ $# -eq 0 ]; then
|
||
|
echo "错误:请指定目标目录路径"
|
||
|
echo "用法: $0 /目录/路径"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
target_dir="$1"
|
||
|
|
||
|
# 检查目录是否存在
|
||
|
if [ ! -d "$target_dir" ]; then
|
||
|
echo "错误:目录 '$target_dir' 不存在"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# 设置安全选项
|
||
|
set -euo pipefail
|
||
|
IFS=$'\n' # 正确处理文件名中的空格
|
||
|
|
||
|
echo "开始处理目录: $target_dir"
|
||
|
echo "----------------------------------------"
|
||
|
|
||
|
# 查找所有包含 'hoistwork' 的文件名
|
||
|
counter=0
|
||
|
while IFS= read -r -d $'\0' file; do
|
||
|
# 获取文件名和目录路径
|
||
|
dirpath=$(dirname "$file")
|
||
|
filename=$(basename "$file")
|
||
|
|
||
|
# 检查是否需要替换
|
||
|
if [[ "$filename" == *"hoistwork"* ]]; then
|
||
|
# 执行替换
|
||
|
new_name="${filename//hoistwork/breakground}"
|
||
|
new_path="$dirpath/$new_name"
|
||
|
|
||
|
# 避免覆盖已存在文件
|
||
|
if [ -e "$new_path" ]; then
|
||
|
echo "警告: 跳过 '$file' -> '$new_name' (目标文件已存在)"
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
# 执行重命名
|
||
|
mv -v "$file" "$new_path"
|
||
|
((counter++))
|
||
|
fi
|
||
|
done < <(find "$target_dir" -type f -print0 2>/dev/null)
|
||
|
|
||
|
echo "----------------------------------------"
|
||
|
echo "完成! 已重命名 $counter 个文件"
|