【发布时间】:2019-02-07 00:11:17
【问题描述】:
我正在尝试通过将序号添加到具有匹配文件名的文件来添加/修改文件名。我仍在学习,但基于 SO 的一些帖子,我已经能够接近。问题是下面的代码按顺序向所有文件添加数字,而不是基于匹配的文件名。
e='t'
j=1
basename="$1"
newname="$2"
for f in "$basename"*.run?.t
do
echo mv -- "$f" "$newname${f#$basename%.run*.t}.run$((j++)).$e"
done
这是我的文件的简化版本:
1234.Gorilla_sub1.run1.t
1234.Gorilla_sub2.run1.t
1234.Gorilla_sub3.run1.t
1234.Gorilla_sub1.run2.t
1234.Gorilla_sub2.run2.t
4578.Gorilla_sub1.run1.t
4578.Gorilla_sub2.run1.t
我想要:
1234.Gorilla_sub1.run1.t
1234.Gorilla_sub2.run2.t
1234.Gorilla_sub3.run3.t
1234.Gorilla_sub1.run4.t
1234.Gorilla_sub2.run5.t
4578.Gorilla_sub1.run1.t
4578.Gorilla_sub2.run2.t
但我上面的代码是这样做的:
1234.Gorilla_sub1.run1.t.run1.t
1234.Gorilla_sub2.run1.t.run2.t
1234.Gorilla_sub3.run1.t.run3.t
1234.Gorilla_sub1.run1.t.run4.t
1234.Gorilla_sub2.run1.t.run5.t
4578.Gorilla_sub1.run1.t.run6.t
4578.Gorilla_sub2.run2.t.run7.t
如何让它根据相同的文件名前缀(1234.Gorilla、4578.Gorilla)重新开始编号?还要替换 run?.t 而不是添加它?文件读取子的部分?我稍后会删除,如果这有影响的话。 非常感谢!
【问题讨论】:
-
您的问题不清楚。请缩进您的代码并提供更好的输入示例
-
您输入的样本是重复文件...您希望它们以“.t”结尾?用“.1”?还是首先存在的任何东西?您上面的代码无法给出您所说的输出。
-
抱歉,我修改了示例以更好地匹配我的文件。
-
需要保留订单吗?
-
不,我想我是否理解正确。
标签: bash rename string-matching sequential