如何重命名一堆文件的扩展名?

冷暖自知 提交于 2020-02-26 02:36:33

在一个目录中,我有一堆*.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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!