用于更改文件名的序列号的脚本

时间:2009-10-09 14:28:38

标签: unix shell scripting sed awk

我正在写一个shell脚本而且我被卡住了。要求是:我将收到有序列号的文件,如xyz0001abcd.DAT。我创建该文件的副本,保留序列号,如abcd000001gfh.DAT。原始文件名使用四位数字(最多9999),复制的文件名使用六位数(最多999999)。

当9999进入原始文件时,我被卡住了。原始文件序列号将环绕,但我希望复制的文件序列号继续。也就是说,在映射9999-> 009999之后,我将再次接收0001,并将其映射到10000,以便复制的文件可以继续编号直到999999。

xyz0001abcd.DAT -> abcd000001gfh.DAT
xyz0002abcd.DAT -> abcd000002gfh.DAT
.
.
.
xyz9999abcd.DAT -> abcd009999gfh.DAT   # First sequence wraps around.
xyz0001abcd.DAT -> abcd010000gfh.DAT
xyz0002abcd.DAT -> abcd010001gfh.DAT

如何以shell脚本的形式完成?

1 个答案:

答案 0 :(得分:0)

您可以使用以下命令获取原始文件的序列号:

echo $myFileName | sed 's/^[^0-9]*\(....\).*$/\1/'

您可以获取以原始文件命名的所有现有重复文件的列表,但是根据需要使用两位数的前缀:

printf "%s\n" ` `echo $myFileName | sed "s/\([0-9]\)/??\1/" `

您可以使用以下命令获取重复文件的两位数字前缀:

echo $myDupFileName | sed 's/^[^0-9]*\(..\).*$/\1/'

通过组合前两个命令,以原始文件命名的所有重复文件的最大两位数字前缀:

printf "%s\n" ` `echo $myFileName | sed "s/\([0-9]\)/??\1/" ` \
| tail -1 \
| sed 's/^[^0-9]*\(..\).*$/\1/'

我作为练习离开:

  • 这个最大前缀的增量,
  • 在没有重复的情况下测试案例,
  • 根据已收集的所有信息建立新名称。