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

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


当前回答

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

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

其他回答

你可以使用一个专为批量重命名文件而设计的工具,例如renamer。

重命名当前文件夹下的所有文件扩展名。

$ renamer --find ".html" --replace ".txt" --dry-run * 

这里有更多的用法示例。

类似于之前的建议,我是这样做的:

find . -name '*OldText*' -exec sh -c 'mv "$0" "${0/OldText/NewText}"' {} \;

我首先用

find . -name '*OldText*' -exec sh -c 'echo mv "$0" "${0/OldText/NewText}"' {} \;

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

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

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

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

在Linux或window git bash或window的wsl中,尝试以下命令,只需一行代码就可以更改当前目录或子目录甚至其子目录中的每个文件的扩展名

find . -depth -name "*.html" -exec sh -c 'mv "$1" "${1%.html}.txt"' _ {} \;

对于Ubuntu用户:

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