在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
当前回答
重命名当前目录和子目录下所有文件的扩展名,不需要任何其他包(仅使用shell脚本):
在当前目录下创建shell脚本rename.sh,代码如下: #!/bin/bash 在$(查找。- name“* 1美元”);做 Mv "$file" "${file%$1}$2" 完成 通过./rename.sh .old .new运行它。 例如:./rename.sh .html .txt
其他回答
这为我工作在OSX从.txt到.txt_bak
find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;
在别人的网站抓取之后,我发现成千上万的文件都没有。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"
修复需要:处理文件名中的空格
如果使用bash,则不需要使用sed、basename、rename、expr等外部命令。
for file in *.html
do
mv "$file" "${file%.html}.txt"
done
类似于之前的建议,我是这样做的:
find . -name '*OldText*' -exec sh -c 'mv "$0" "${0/OldText/NewText}"' {} \;
我首先用
find . -name '*OldText*' -exec sh -c 'echo mv "$0" "${0/OldText/NewText}"' {} \;
你也可以在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