在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
当前回答
你也可以在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
其他回答
使用rename命令的示例如下:
rename -n ’s/\.htm$/\.html/’ *.htm
-n表示它是测试运行,不会实际更改任何文件。它将向您显示删除-n后将重命名的文件列表。在上面的例子中,它将当前目录中的所有文件从扩展名为.htm的文件转换为.html。
如果上面测试运行的输出看起来没问题,那么你可以运行最终版本:
rename -v ’s/\.htm$/\.html/’ *.htm
-v是可选的,但是包含它是个好主意,因为它是你通过rename命令所做的更改的唯一记录,如下面的示例输出所示:
$ rename -v 's/\.htm$/\.html/' *.htm
3.htm renamed as 3.html
4.htm renamed as 4.html
5.htm renamed as 5.html
中间的棘手部分是使用正则表达式的Perl替换,如下所示:
rename -v ’s/\.htm$/\.html/’ *.htm
你也可以在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
这里有一个解决方案,使用AWK。确保文件存在于工作目录中。否则,cd到html文件所在的目录,然后执行以下命令:
for i in $(ls | grep .html); do j=$(echo $i | grep -oh "^\w*." | awk '{print $1"txt"}'); mv $i $j; done
这个问题明确提到了Bash,但如果你恰好有可用的ZSH,它是相当简单的:
zmv '(*).*' '$1.txt'
如果你得到zsh:命令没有找到:zmv,然后简单地运行:
autoload -U zmv
然后再试一次。
感谢这篇关于zmv的原创文章。
在Mac上……
如果你没有安装rename: brew Install rename 重命名-S .html .txt *.html