使用模式重命名一组文件.1.gz.html 至.html

使用模式重命名一组文件.1.gz.html 至.html

我尝试使用命令:

mv *.1.gz.html *.html

但是,我得到了回复:

<filename> 不是目录。

我怎样才能让它发挥作用?我也尝试了重命名命令,但是,我也无法使其工作。对我来说正则表达式太多了。

我认为如果我更好地理解的话,使用 xargs 会起作用。

答案1

mv重命名单个文件或将多个文件移动到单个目录中。

如果您想重命名许多文件,您可能想使用rename.

根据您的版本rename

 rename .1.gz.html .html *.1.gz.html

或者

 rename 's/\.1\.gz\.html/\.html/' *.1.gz.html

第一个版本编写起来更容易一些,第二个版本更强大,有时可以作为perl-rename.查看man rename以找到正确的语法。

答案2

像这样的通配符会扩展到与其匹配的所有内容mv命令甚至运行。更糟糕的是,它*.html也会匹配您的*.1.gz.html文件。

这意味着(例如两个名为abc.1.gz.html和 的文件def.1.gz.html)上面的命令本质上正在运行:

mv abc.1.gz.html def.1.gz.html abc.1.gz.html def.1.gz.html

这将尝试将 和 移动abc.1.gz.htmldef.1.gz.html名为 的目录中def.1.gz.html。值得庆幸的是,这失败了,因为该文件不是目录。

您需要编写一些脚本来一次查看每个文件,例如:

for file in *.1.gz.html; do
  mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`"
done

相关内容