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

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


当前回答

很好很简单!

find . -iname *.html  -exec mv {} "$(basename {} .html).text"  \;

其他回答

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

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

最简单的方法是使用重命名。ul它出现在大多数Linux发行版中

重命名。ul -o -v [oldFileExtension] [newFileExtension][搜索要应用的文件的表达式]

rename.ul -o -v .oldext .newext *.oldext

选项:

-o:不覆盖预先存在的. newnext

- v:详细

-n:演练

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

这正是你想要的。

你也可以在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

有关更好的解决方案(只有bash功能,而不是外部调用),请参阅其他答案之一。


下面的操作会做,但不需要系统有重命名程序(尽管你经常在系统上有这个程序):

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

编辑:正如评论中指出的那样,这对于没有适当引用的空格的文件名(现在添加到上面)不起作用。当你只在你自己的文件中工作时,你知道文件名中没有空格,这是可以工作的,但是当你写一些可能在以后被重用的东西时,不要跳过适当的引用。