linux中批量修改文件后缀名推荐用for循环配合bash参数扩展,如${file%.txt}.md安全替换;含空格文件宜用find -print0与read -d ''处理;操作前务必用echo预览命令。

在 Linux 中用 for 循环批量修改文件后缀名,核心是遍历目标文件并用 mv 重命名,关键在于正确提取文件名(不含后缀)和替换后缀。下面几种常用且安全的方法供你选择。
基础 for 循环 + 变量扩展(推荐初学者)
利用 Bash 的参数扩展功能(如 ${file%.*} 去掉最后一个点及之后内容),不依赖外部命令,简洁可靠:
- 把当前目录下所有
.txt文件改为.md
for file in *.txt; do
[ -f "$file" ] && mv "$file" "${file%.txt}.md"
done
说明:${file%.txt} 表示从末尾删除最短匹配的 .txt;[ -f "$file" ] 防止通配符无匹配时误处理字面量 *.txt。
处理含空格或特殊字符的文件名
当文件名含空格、括号等时,必须加双引号,并建议用 find 替代通配符更稳妥:
- 递归修改当前目录(不含子目录)所有
.log为.bak
find . -maxdepth 1 -type f -name "*.log" -print0 | while IFS= read -r -d '' file; do dir=$(dirname "$file") base=$(basename "$file" .log) mv "$file" "$dir/$base.bak" done
说明:-print0 和 read -d '' 配合可安全处理任意文件名;basename "$file" .log 直接剥离后缀,比字符串截取更直观。
批量添加/替换后缀(如统一加 .old)
不是“改后缀”,而是“加后缀”或“换整个后缀”,可用 ${file##*.} 提取原扩展名再替换:
- 把所有
.jpg和.png改为.webp
for file in *.jpg *.png; do
[ -f "$file" ] && mv "$file" "${file%.*}.webp"
done
注意:如果某类文件不存在(如没 .png),shell 默认会保留字面量 *.png,导致报错。可先用 shopt -s nullglob 让无匹配时展开为空。
安全第一:先预览,再执行
别急着 mv,先用 echo 看效果:
for file in *.txt; do
[ -f "$file" ] && echo "mv '$file' '${file%.txt}.md'"
done
确认输出无误后,复制粘贴执行,或把 echo "mv ..." 改成 mv ... 即可。











