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

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


当前回答

对于Ubuntu用户:

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

其他回答

我用。bashrc写了这段代码

alias find-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; find $p_path -type f -name "*."$p_ext1'
alias rename-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; read -p "Change by ext. (unpunctured): " p_ext2; echo -en "\nFound files:\n"; find $p_path -type f -name "*.$p_ext1"; find $p_path -type f -name "*.$p_ext1" -exec sh -c '\''mv "$1" "${1%.'\''$p_ext1'\''}.'\''$p_ext2'\''" '\'' _ {} \;; echo -en "\nChanged Files:\n"; find $p_path -type f -name "*.$p_ext2";'

在"/home/<user>/example-files"这样的文件夹中:

/home/<用户> /示例文件: 中 file2.txt file3.pdf file4.csv

命令的行为是这样的:

~$ find-text
Path (dot for current): example-files/
Ext (unpunctured): txt

example-files/file1.txt
example-files/file2.txt


~$ rename-text
Path (dot for current): ./example-files
Ext (unpunctured): txt
Change by ext. (unpunctured): mp3

Found files:
./example-files/file1.txt
./example-files/file1.txt

Changed Files:
./example-files/file1.mp3
./example-files/file1.mp3
~$

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

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

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

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

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

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

选项:

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

- v:详细

-n:演练

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

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

命令mmv似乎对大量文件(每秒数万个)非常有效地完成这项任务。例如,要将所有.xml文件重命名为.html文件,使用以下命令:

mmv ";*.xml" "#1#2.html"

的;将匹配路径,*将匹配文件名,这些在替换名称中被称为#1和#2。

基于exec或管道的答案要么太慢,要么在大量文件上失败。