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

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


当前回答

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上的一些东西,这应该可以工作;如果你需要一些更跨平台的东西,那就看看其他的答案。

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

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

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

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

这里有一个解决方案,使用AWK。确保文件存在于工作目录中。否则,cd到html文件所在的目录,然后执行以下命令:

for i in $(ls | grep .html); do j=$(echo $i | grep -oh "^\w*." | awk '{print $1"txt"}'); mv $i $j; done

试试这个

rename .html .txt *.html 

用法:

rename [find] [replace_with] [criteria]

这为我工作在OSX从.txt到.txt_bak

find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;