重命名命令无法按预期工作
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 实用程序! 它们不是不同的版本,而是两个完全独立的同名程序。两者都没有需要遵守的标准。 这并没有回答关于调查为什么重命名工具在相同情况下不起作用的问题。 没有单一的“重命名”工具;正如我所说,有两个不相关的工具可以做类似的事情,只是碰巧使用了相同的名称。如果您没有意识到您实际使用的是哪个工具并尝试将其用作另一个工具,那么它可能会失败。 (如果它没有失败,那么这是由于两个程序的行为相同是巧合,而不是设计或符合不存在的规范。)以上是关于重命名命令无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章