在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt

我该怎么做呢?我使用bash shell。


当前回答

这个问题明确提到了Bash,但如果你恰好有可用的ZSH,它是相当简单的:

zmv '(*).*' '$1.txt'

如果你得到zsh:命令没有找到:zmv,然后简单地运行:

autoload -U zmv

然后再试一次。

感谢这篇关于zmv的原创文章。

其他回答

最简单的方法是使用重命名。ul它出现在大多数Linux发行版中

重命名。ul -o -v [oldFileExtension] [newFileExtension][搜索要应用的文件的表达式]

rename.ul -o -v .oldext .newext *.oldext

选项:

-o:不覆盖预先存在的. newnext

- v:详细

-n:演练

对于Ubuntu用户:

rename 's/\.html$/\.txt/' *.html

你想要使用rename:

rename -S <old_extension> <new_extension> <files>

rename -S .html .txt *.html

这正是你想要的-它将所有匹配*.html的文件的扩展名从.html更改为.txt。

注意:Greg Hewgill正确地指出这不是bash内置的;是一个单独的Linux命令。如果你只是需要Linux上的一些东西,这应该可以工作;如果你需要一些更跨平台的东西,那就看看其他的答案。

你也可以在Bash中创建一个函数,将它添加到。bashrc或其他文件中,然后在任何你想使用的地方使用它。

change-ext() {
    for file in *.$1; do mv "$file" "$(basename "$file" .$1).$2"; done
}

用法:

change-ext css scss

源代码的功能:https://stackoverflow.com/a/1224786/6732111

一行,没有循环:

ls -1 | xargs -L 1 -I {} bash -c 'mv $1 "${1%.*}.txt"' _ {}

例子:

$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.json  ac8453e2-0d82-4d43-b80e-205edb754700.json
$ ls -1 | xargs -L 1 -I {} bash -c 'mv $1 "${1%.*}.txt"' _ {}
$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.txt  ac8453e2-0d82-4d43-b80e-205edb754700.txt