我正在写一个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脚本的形式完成?
答案 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/'
我作为练习离开: