重命名命令无法按预期工作

Posted

技术标签:

【中文标题】重命名命令无法按预期工作【英文标题】:Rename command doesn't work as expected 【发布时间】:2014-11-28 21:09:59 【问题描述】:

我正在使用“重命名”命令重命名一组文件;例如:

    inputcac1010.inp.log  inputcac1110.inp.log  inputcac1210.inp.log  inputcac1310.inp.log
    inputcac1020.inp.log  inputcac1120.inp.log  inputcac1220.inp.log  inputcac1320.inp.log
    inputcac1030.inp.log  inputcac1130.inp.log  inputcac1230.inp.log  inputcac1330.inp.log
    inputcac1040.inp.log  inputcac1140.inp.log  inputcac1240.inp.log  inputcac1340.inp.log
    inputcac1050.inp.log  inputcac1150.inp.log  inputcac1250.inp.log  inputcac1350.inp.log
    inputcac1060.inp.log  inputcac1160.inp.log  inputcac1260.inp.log  inputcac1360.inp.log
    inputcac1070.inp.log  inputcac1170.inp.log  inputcac1270.inp.log  inputcac1370.inp.log
    inputcac1080.inp.log  inputcac1180.inp.log  inputcac1280.inp.log  inputcac1380.inp.log
    inputcac1090.inp.log  inputcac1190.inp.log  inputcac1290.inp.log  inputcac1390.inp.log
    inputcac1100.inp.log  inputcac1200.inp.log  inputcac1300.inp.log  inputcac1400.inp.log

必须重命名为

    inputcac1010.log  inputcac1110.log  inputcac1210.log  inputcac1310.log
    inputcac1020.log  inputcac1120.log  inputcac1220.log  inputcac1320.log
    inputcac1030.log  inputcac1130.log  inputcac1230.log  inputcac1330.log
    inputcac1040.log  inputcac1140.log  inputcac1240.log  inputcac1340.log
    inputcac1050.log  inputcac1150.log  inputcac1250.log  inputcac1350.log
    inputcac1060.log  inputcac1160.log  inputcac1260.log  inputcac1360.log
    inputcac1070.log  inputcac1170.log  inputcac1270.log  inputcac1370.log
    inputcac1080.log  inputcac1180.log  inputcac1280.log  inputcac1380.log
    inputcac1090.log  inputcac1190.log  inputcac1290.log  inputcac1390.log
    inputcac1100.log  inputcac1200.log  inputcac1300.log  inputcac1400.log

我用过

rename 's/inp\.log/log/' *.inp.log

它似乎不起作用。我通过读取文件名并使用 sed 以不同的方式重命名它们,但我很困惑为什么这个命令在我的情况下不起作用!!!谁能澄清一下?谢谢!

【问题讨论】:

YOur rename 命令对我有用。 你的命令不起作用怎么办?它做了什么吗?如果没有更多信息,我们当然无法为您提供帮助。 unix.stackexchange.com 将是解决这个问题的更好网站 它什么也没做。我更好奇为什么它不起作用,因为它看起来很微不足道。请看上面的截图! @Pradeep 有两个主要版本。一份来自util-linux 一份来自perl 相关库。您正在寻找perl 之一。 【参考方案1】:

您的 rename 版本接受如下参数:

rename inp.log log *.inp.log

我通常只使用循环;性能不是大问题,因为您真正需要多久一次重命名大量文件?

for f in *.inp.log; do
    mv "$f" "$f%.inp.log.log"
done

【讨论】:

这样就解决了问题。谢谢!令人惊讶的是,不同版本的工作方式非常不同,尤其是 linux 实用程序! 它们不是不同的版本,而是两个完全独立的同名程序。两者都没有需要遵守的标准。 这并没有回答关于调查为什么重命名工具在相同情况下不起作用的问题。 没有单一的“重命名”工具;正如我所说,有两个不相关的工具可以做类似的事情,只是碰巧使用了相同的名称。如果您没有意识到您实际使用的是哪个工具并尝试将其用作另一个工具,那么它可能会失败。 (如果它没有失败,那么这是由于两个程序的行为相同是巧合,而不是设计或符合不存在的规范。)

以上是关于重命名命令无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 bash 脚本批量重命名 FTP 服务器上的文件

Git:重命名分支中的目录

windows下使用cmd重命名文件名

VLC 使用 lua 脚本重命名当前项目

为啥linux无法重命名文件

apt无法重命名文件