如何更改有序文件的编号?

如何更改有序文件的编号?

问题描述:

我有一组文件,如“surfgrid.3.h5”到“surfgrid.14.h5”,我需要它们从“surfgrid.1.h5”到“surfgrid.12.h5”。我有不同的起点相同的问题(它不总是从3开始)。如何更改有序文件的编号?

我尝试了几种类似问题的解决方案,但在这种情况下它们不起作用。还有一些测试首先将文件从10更改为14,然后3至9更改对我而言最重要的顺序。

我使用的是一台可以和Linux一起工作的机器。

由于

+0

你想要他们在哪里订购?像打印出来一样? –

+0

@BenjaminCommet我认为他只是想采取一组数字中有差距的文件名,并将它们重命名为连续的。 – Barmar

我认为下面的代码应该为你做这项工作。

Start=3 
End=14 
echo "\$Start = " $Start " and \$End = " $End 
for i in $(seq $Start $End); 

    do 
    echo " i is $i" 
    j=$((i-2)) 
    echo " j is $j" 
    cp surfgrid.$i.h5 surfgrid.$j.h5 
    done 
+0

这很好。它保持文件的原始顺序。 谢谢! – Marco

增量变动的变量,并使用该就位在文件名的数目。

我将它们初始化为另一个目录,以避免旧名称和新名称之间的名称冲突问题。

mkdir temp 
i=1 
for file in surfgrid.*.h5 
do 
    mv "$file" "temp/surfgrid.$i.h5" 
    ((i++)) 
done 
mv temp/* . 

当shell扩展通配符surfgrid.*.h5,它的字典顺序,而不是数字,所以sufgrid.10.h5sufgrid.2.h5之前。请参阅Glob with Numerical Order 以获取相关解决方案。

+0

谢谢,该程序的作品,但它并没有保持正确的顺序。我得到的是: 10 - > 1 ... 14 - > 5, 3 - > 6 ... 9 - > 12 – Marco

+0

的问题并没有说如何什么结果顺序应与原始名称相关。 – Barmar

+0

扩展通配符时,shell使用字典顺序,而不是数字顺序。 – Barmar