| 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 |