在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
当前回答
有关更好的解决方案(只有bash功能,而不是外部调用),请参阅其他答案之一。
下面的操作会做,但不需要系统有重命名程序(尽管你经常在系统上有这个程序):
for file in *.html; do
mv "$file" "$(basename "$file" .html).txt"
done
编辑:正如评论中指出的那样,这对于没有适当引用的空格的文件名(现在添加到上面)不起作用。当你只在你自己的文件中工作时,你知道文件名中没有空格,这是可以工作的,但是当你写一些可能在以后被重用的东西时,不要跳过适当的引用。
其他回答
命令mmv似乎对大量文件(每秒数万个)非常有效地完成这项任务。例如,要将所有.xml文件重命名为.html文件,使用以下命令:
mmv ";*.xml" "#1#2.html"
的;将匹配路径,*将匹配文件名,这些在替换名称中被称为#1和#2。
基于exec或管道的答案要么太慢,要么在大量文件上失败。
你想要使用rename:
rename -S <old_extension> <new_extension> <files>
rename -S .html .txt *.html
这正是你想要的-它将所有匹配*.html的文件的扩展名从.html更改为.txt。
注意:Greg Hewgill正确地指出这不是bash内置的;是一个单独的Linux命令。如果你只是需要Linux上的一些东西,这应该可以工作;如果你需要一些更跨平台的东西,那就看看其他的答案。
类似于之前的建议,我是这样做的:
find . -name '*OldText*' -exec sh -c 'mv "$0" "${0/OldText/NewText}"' {} \;
我首先用
find . -name '*OldText*' -exec sh -c 'echo mv "$0" "${0/OldText/NewText}"' {} \;
你可以使用一个专为批量重命名文件而设计的工具,例如renamer。
重命名当前文件夹下的所有文件扩展名。
$ renamer --find ".html" --replace ".txt" --dry-run *
这里有更多的用法示例。
最简单的方法是使用重命名。ul它出现在大多数Linux发行版中
重命名。ul -o -v [oldFileExtension] [newFileExtension][搜索要应用的文件的表达式]
rename.ul -o -v .oldext .newext *.oldext
选项:
-o:不覆盖预先存在的. newnext
- v:详细
-n:演练