如果我有一组扩展名为 .htm 的文件,我该如何将它们全部重命名为 .html?
mv *.htm *.html
不起作用。
答案1
或者,您可以使用纯 bash...(除了 mv,就是这样..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
并避免令人讨厌的基本名称内容。;)
Bash 有一套广泛的变量扩展选项。这里使用的选项是“%”,它会从变量的值中删除最小的匹配后缀。该模式是一个 glob 模式,因此${file%.*}
也可以使用。“%%”运算符会删除最大的匹配后缀,并且在上面的示例中是可以互换的,因为模式是固定的,${file%%.*}.html
但是会将 abhtm 变成 a.html。
请参阅 bash 手册页的变量替换部分,了解更多巧妙的技巧。在 bash 中可以直接完成很多操作。
答案2
文件名中不应有空格、换行符或其他空白,但 freiheit 的答案的这个版本可以处理这些问题。它还使用$()
反引号代替反引号以提高可读性以及其他好处。
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
甚至更好 - 对于只需添加到末尾的特殊情况:
for file in *.htm
do
mv "$file" "${file}l"
done
答案3
rename(1)
是一个 Perl 实用程序,可以完全满足您的要求。在本例中:
rename 's/\.htm$/.html/' *htm
或者如果你也使用子目录
(需要 Bash 4.0 和 globstar 设置shopt -s globstar
:)
rename 's/\.htm$/.html/' **/*htm
答案4
另一个使用字符串替换的纯 bash 示例。
for file in *.htm; do mv $file ${file/htm/html}; done
额外 - 这将替换所有出现的字符串
for file in *.htm; do mv $file ${file//htm/html}; done