在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
当前回答
如果使用bash,则不需要使用sed、basename、rename、expr等外部命令。
for file in *.html
do
mv "$file" "${file%.html}.txt"
done
其他回答
试试这个
rename .html .txt *.html
用法:
rename [find] [replace_with] [criteria]
在别人的网站抓取之后,我发现成千上万的文件都没有。html扩展名,在一大堆子目录中。
要一次性重命名它们,除了已经有.html扩展名的文件(大多数文件根本没有扩展名),这对我来说很管用:
cd wwwroot
find . -xtype f \! -iname *.html -exec mv -iv "{}" "{}.html" \; # batch rename files to append .html suffix IF MISSING
在OP的情况下,我可能会稍微修改一下,只重命名*.txt文件,如下所示:
find . -xtype f -iname *.txt -exec filename="{}" mv -iv ${filename%.*}.{txt,html} \;
分解(锤击时间!):
- iname * . txt -表示只考虑已经以.txt结尾的文件
Mv -iv "{}.{txt,html}" -当find传递一个{}作为文件名时,${filename%。*}提取它的basename,没有任何扩展,以形成mv的参数。Bash将{txt,html}重写为两个参数,因此最后的命令运行为:mv -iv "filename.txt" "filename.html"
修复需要:处理文件名中的空格
这是我用来重命名。edge文件为。blade.php
for file in *.edge; do mv "$file" "$(basename "$file" .edge).blade.php"; done
很有魅力。
使用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,但如果你恰好有可用的ZSH,它是相当简单的:
zmv '(*).*' '$1.txt'
如果你得到zsh:命令没有找到:zmv,然后简单地运行:
autoload -U zmv
然后再试一次。
感谢这篇关于zmv的原创文章。