1 |
jmc |
1.1 |
#!/bin/sh |
2 |
|
|
|
3 |
|
|
# $Header: $ |
4 |
|
|
# $Name: $ |
5 |
|
|
|
6 |
|
|
#- default: |
7 |
|
|
prt=1 |
8 |
|
|
action=1 |
9 |
|
|
cmd='mv -i' |
10 |
|
|
#- use main-pickup prefix to select between ckptA / ckptB: |
11 |
|
|
pref='pickup' |
12 |
|
|
|
13 |
|
|
flag=0 ; opt='' ; nbArg=$# |
14 |
|
|
while [ $nbArg -ge 1 ] |
15 |
|
|
do |
16 |
|
|
case $1 in |
17 |
|
|
'-s') if test $prt = 1 ; then prt=0 ; else prt=-1 ; fi |
18 |
|
|
opt="$opt $1" ; nbArg=`expr $nbArg - 1` ; shift ;; |
19 |
|
|
'-v') if test $prt = 1 ; then prt=2 ; else prt=-1 ; fi |
20 |
|
|
opt="$opt $1" ; nbArg=`expr $nbArg - 1` ; shift ;; |
21 |
|
|
'-n') action=0 ; |
22 |
|
|
opt="$opt $1" ; nbArg=`expr $nbArg - 1` ; shift ;; |
23 |
|
|
'-f') cmd='mv -f' |
24 |
|
|
opt="$opt $1" ; nbArg=`expr $nbArg - 1` ; shift ;; |
25 |
|
|
'-p') if [ $# -ge 2 ] |
26 |
|
|
then pref=$2 ; opt="$opt $1=$2" |
27 |
|
|
nbArg=`expr $nbArg - 2` ; shift ; shift |
28 |
|
|
else echo "Error: prefix missing after '$1'" ; flag=-1 ; nbArg=0 |
29 |
|
|
fi ;; |
30 |
|
|
'A'|'B'|'I'|'T') if test $flag = 0 |
31 |
|
|
then flag=$1 ; nbArg=`expr $nbArg - 1` ; shift |
32 |
|
|
else echo "Error: incompatible methods '$flag' & '$1' " |
33 |
|
|
flag=-1 ; nbArg=0 |
34 |
|
|
fi ;; |
35 |
|
|
*) echo "Error: unrecognized option: '$1'" ; flag=-1 ; nbArg=0 ;; |
36 |
|
|
esac |
37 |
|
|
done |
38 |
|
|
if test $prt = -1 ; then |
39 |
|
|
echo "Error: options: '$opt' are not compatible" ; |
40 |
|
|
flag=0; |
41 |
|
|
fi |
42 |
|
|
|
43 |
|
|
if [ $prt -ge 2 ] ; then |
44 |
|
|
echo " flag='$flag' ; cmd='$cmd' ; move='$action' ; prt='$prt' ; opt='$opt'" |
45 |
|
|
fi |
46 |
|
|
if test $flag = 0 -o $flag = -1 |
47 |
|
|
then |
48 |
|
|
echo "Usage: `basename $0` method [options]" |
49 |
|
|
echo " Rename 'pickup*.ckpt[A,B].*' files to 'pickup*.[10-digits-iter].*'" |
50 |
|
|
echo " method= A :: select pickup with suffix 'ckptA'" |
51 |
|
|
echo " method= B :: select pickup with suffix 'ckptB'" |
52 |
|
|
echo " method= I :: select the largest Iter number between 'ckptA' & 'ckptB'" |
53 |
|
|
echo " method= T :: by Time: select the most recent pickup" |
54 |
|
|
echo " option: -v = verbose-mode / -s = silent (<- not both)" |
55 |
|
|
echo " option: -n = do nothing (no mv)" |
56 |
|
|
echo " option: -f = force to move files (using 'mv -f')" |
57 |
|
|
echo " option: -p PREFIX = use PREFIX to select ckptA/B (e.g.: 'pickup_cd')" |
58 |
|
|
echo " (default: PREFIX='pickup' corresponds to main pickup file)" |
59 |
|
|
exit 2 |
60 |
|
|
fi |
61 |
|
|
# ( Note: PREFIX does not limit the Nb of pickup files to |
62 |
|
|
# rename, since it always rename all the pickup*.ckpt?.* ) |
63 |
|
|
#- exit status: |
64 |
|
|
# 0 = normal renaming ; 1 = nothing to do ; > 1 = error : |
65 |
|
|
# 2 = argument list error ; 3 = meta file is missing |
66 |
|
|
# 4 = error in reading iteration number from meta file |
67 |
|
|
#-------------------------------------------------------------- |
68 |
|
|
|
69 |
|
|
#- 1) make the list of potential pickup-meta file (-> listM) |
70 |
|
|
if test $flag = 'T' |
71 |
|
|
then |
72 |
|
|
listM=`ls -t -1 $pref.*.meta 2> /dev/null | head -1` |
73 |
|
|
if test "x$listM" = x |
74 |
|
|
then echo "Error: no '$pref.*.meta' found" ; exit 3 ; fi |
75 |
|
|
zz=`echo $listM | sed "s/$pref\.//" | sed 's/\..*$//'` |
76 |
|
|
xx=`echo $zz | sed 's/[0-9]/a/g'` |
77 |
|
|
if test $xx = 'aaaaaaaaaa' |
78 |
|
|
then echo ' => no need to rename pickup: latest='$listM |
79 |
|
|
exit 1 |
80 |
|
|
fi |
81 |
|
|
fi |
82 |
|
|
|
83 |
|
|
if test $flag = 'A' -o $flag = 'B' |
84 |
|
|
then |
85 |
|
|
zz="ckpt$flag" |
86 |
|
|
listM=`ls -1 $pref.${zz}*.meta 2> /dev/null | head -1` |
87 |
|
|
if test "x$listM" = x |
88 |
|
|
then echo "Error: no '$pref.${zz}*.meta' found" ; exit 3 ; fi |
89 |
|
|
fi |
90 |
|
|
|
91 |
|
|
if test $flag = 'I' |
92 |
|
|
then |
93 |
|
|
#- first search for global meta file, then tiled meta file |
94 |
|
|
listM=`ls -1 $pref.ckpt{A,B}.meta 2> /dev/null` |
95 |
|
|
if test "x$listM" = x ; then |
96 |
|
|
listM=`ls -1 $pref.ckpt{A,B}.[0-9][0-9][0-9].[0-9][0-9][0-9].meta 2> /dev/null` |
97 |
|
|
fi |
98 |
|
|
if test "x$listM" = x |
99 |
|
|
then echo "Error: no '$pref.ckpt[A or B]*.meta' found" ; exit 3 ; fi |
100 |
|
|
fi |
101 |
|
|
|
102 |
|
|
if [ $prt -ge 2 ] ; then echo ' listM='$listM ; fi |
103 |
|
|
#-- 2) select the meta-file corresponding to the largest iteration number |
104 |
|
|
iter=0; |
105 |
|
|
for xx in $listM |
106 |
|
|
do |
107 |
|
|
num=`grep '^ timeStepNumber =' $xx | sed 's/timeStepNumber = \[//' | sed 's/ \];$//'` |
108 |
|
|
if [ $num -gt $iter ] ; then |
109 |
|
|
iter=$num |
110 |
|
|
zz=`echo $xx | sed "s/$pref\.//" | sed 's/\..*$//'` |
111 |
|
|
if [ $prt -ge 2 ] ; then echo ' num='$num 'in' $zz ; fi |
112 |
|
|
fi |
113 |
|
|
done |
114 |
|
|
if test $iter = 0 ; then echo "Error: no iter found in meta file" ; exit 4 ; fi |
115 |
|
|
|
116 |
|
|
#-- 3) move pickup files: |
117 |
|
|
sufx=`printf "%10.10i\n" $iter` |
118 |
|
|
listP=`ls pickup*.${zz}* | sed 's/\..*//g' | uniq` |
119 |
|
|
if [ $prt -ge 1 ] ; then echo ' rename' $zz '->' $sufx 'for all:' $listP ; fi |
120 |
|
|
for yy in $listP |
121 |
|
|
do |
122 |
|
|
listF=`ls -1 $yy.${zz}*` |
123 |
|
|
for xx in $listF |
124 |
|
|
do |
125 |
|
|
new=`echo $xx | sed "s/^$yy\.$zz/$yy\.$sufx/"` |
126 |
|
|
if [ $prt -ge 2 ] ; then echo $cmd $xx $new ; fi |
127 |
|
|
if test $action = 1 ; then $cmd $xx $new ; fi |
128 |
|
|
done |
129 |
|
|
done |
130 |
|
|
exit 0 |