在一个目录中,我有一堆*.html
文件。 我想将它们全部重命名为*.txt
我怎样才能做到这一点? 我使用bash shell。
#1楼
你想使用rename
:
rename -S .html .txt *.html
这完全符合您的要求 - 它会将扩展名从.html
更改为.txt
以匹配*.html
所有文件。
注意:Greg Hewgill正确地指出这不是一个bash内置; 并且是一个单独的Linux命令。 如果你只需要Linux上的东西,这应该工作正常; 如果您需要更多跨平台的东西,那么请看一下其他答案。
#2楼
不幸的是,做便携并不是微不足道的。 你可能需要一些expr魔法。
for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done
一旦你开心它就能做你想做的事情,就去除回声。
编辑:对于这种特殊情况, basename
可能更具可读性,尽管expr
通常更灵活。
#3楼
rename 's/\.html$/\.txt/' *.html
完全符合你的要求。
#4楼
要获得更好的解决方案(仅使用bash功能,而不是外部调用),请参阅其他答案之一 。
以下内容可以并且不需要系统具有rename
程序(尽管您通常在系统上具有此功能):
for file in *.html; do
mv "$file" "$(basename "$file" .html).txt"
done
编辑:正如评论中所指出的,如果没有适当的引用(现在在上面添加),这对于包含空格的文件名不起作用。 当你纯粹在自己的文件上工作时,你知道文件名中没有空格,这将有效但是无论何时你写下可以在以后重复使用的东西,都不要跳过正确的引用。
#5楼
如果使用bash,则不需要外部命令,如sed,basename,rename,expr等。
for file in *.html
do
mv "$file" "${file%.html}.txt"
done
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3161630