Answers:
或者,您可以使用纯bash ...(除mv以外,就是..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
并避免使用讨厌的基本名称。;)
Bash具有广泛的变量扩展选项集。此处使用的一个'%'从变量值中删除最小的匹配后缀。该模式是全局模式,因此${file%.*}
也可以使用。'%%'运算符删除了最大的匹配后缀,并且在上面的示例中可以互换,因为该模式是固定的,${file%%.*}.html
但是会将abhtm转换为a.html。
有关更多巧妙的技巧,请参见bash联机帮助页的变量替换部分。直接在bash中可以做很多事情。
文件名中不应包含空格,换行符或其他空格,但是此版本的freiheit的答案可以解决这些问题。它还使用$()
反引号代替了可读性以及其他优点。
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
甚至更好-对于仅添加到最后的特殊情况:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
是一个Perl实用程序,可以完全满足您的需求。在这种情况下:
rename 's/\.htm$/.html/' *htm
或者如果您也在使用子目录
(需要猛砸4.0和globstar设置:shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
随Perl一起提供,并且这些天基本上每个unix都随Perl一起提供。
shopt -s globstar
(默认为关闭)。另外,Linux和Unix具有目录而不是文件夹。
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
与尝试它echo
在前面mv
第一次左右。
原始文件的问题是“ mv *.htm *.html
” *
由外壳程序处理了,因此该mv
命令仅查看当前目录中所有.htm和.html文件的列表。换句话说,类似“ mv foo.htm bar.htm stuff.htm six.htm file.htm
”。如果最后一个是目录,则mv仅知道如何处理2个以上的参数。
mv
无法正常工作。
#
。
ren *.htm *.html
将在Windows中运行。