我尝试使用命令:
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.html
到def.1.gz.html
名为 的目录中def.1.gz.html
。值得庆幸的是,这失败了,因为该文件不是目录。
您需要编写一些脚本来一次查看每个文件,例如:
for file in *.1.gz.html; do
mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`"
done