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

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


当前回答

有点晚了。你可以用xargs:

ls *.html | xargs -I {} sh -c 'mv $1 `basename $1 .html`.txt' - {}

或者你所有的文件都在某个文件夹里

ls folder/*.html | xargs -I {} sh -c 'mv $1 folder/`basename $1 .html`.txt' - {}

其他回答

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

这正是你想要的。

如果你更喜欢PERL,这里有一个简短的PERL脚本(最初由PERL的创造者Larry Wall编写),它将完全满足你的需求: tips.webdesign10.com/files/rename.pl.txt。

对于你的例子,下面的方法应该可以奏效:

rename.pl 's/html/txt/' *.html

重命名当前目录和子目录下所有文件的扩展名,不需要任何其他包(仅使用shell脚本):

在当前目录下创建shell脚本rename.sh,代码如下: #!/bin/bash 在$(查找。- name“* 1美元”);做 Mv "$file" "${file%$1}$2" 完成 通过./rename.sh .old .new运行它。 例如:./rename.sh .html .txt

这是一次修改多个扩展的好方法:

for fname in *.{mp4,avi}
do
   mv -v "$fname" "${fname%.???}.mkv"
done

注意:注意在扩展的大小是相同的(??)

不幸的是,可移植并不是一件简单的事情。你可能需要一点魔法。

for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done

一旦你满意了,就把回声移开,它会按你想的做。

Edit: basename对于这种特殊情况可能可读性更好一些,尽管expr通常更灵活。