-
Notifications
You must be signed in to change notification settings - Fork 1
/
update_sifts_via_rsync_worker.sh
executable file
·112 lines (74 loc) · 1.44 KB
/
update_sifts_via_rsync_worker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/bin/bash
source ./scripts/env.sh
SRC_DIR=
DST_DIR=
DIR_LIST=
ARGV=`getopt --long -o "s:d:l:n:" "$@"`
eval set -- "$ARGV"
while true ; do
case "$1" in
-s)
SRC_DIR=$2
shift
;;
-d)
DST_DIR=$2
shift
;;
-l)
DIR_LIST=$2
shift
;;
-n)
PROC_INFO=$2
shift
;;
*)
break
;;
esac
shift
done
if ! [[ $PROC_INFO =~ .*of.* ]] ; then
echo "Invalid thread id ($PROC_INFO)."
exit 1
fi
MAXPROCS=`echo $PROC_INFO | cut -d 'f' -f 2`
PROC_ID=`echo $PROC_INFO | cut -d 'o' -f 1`
PROC_ID=$(($PROC_ID - 1))
TOTAL=`wc -l < $DIR_LIST`
proc_id=0
while read div_dir
do
proc_id_mod=$(($proc_id % $MAXPROCS))
if [ $proc_id_mod = $PROC_ID ] ; then
lock_file=$DST_DIR/$div_dir/.lock
done_file=$DST_DIR/$div_dir/.done
if [ ! -e $lock_file ] && [ ! -e $done_file ] ; then
touch $lock_file
rsync -a --delete $SRC_DIR/$div_dir/ $DST_DIR/$div_dir
touch $done_file
if [ $proc_id_mod -eq 0 ] ; then
echo -e -n "\rDone "$((proc_id + 1)) of $TOTAL ...
fi
rm -f $lock_file
fi
fi
let proc_id++
done < $DIR_LIST
proc_id=0
while read div_dir
do
proc_id_mod=$(($proc_id % $MAXPROCS))
if [ $proc_id_mod = $PROC_ID ] ; then
lock_file=$DST_DIR/$div_dir/.lock
done_file=$DST_DIR/$div_dir/.done
if [ ! -e $lock_file ] && [ ! -e $done_file ] ; then
touch $lock_file
rsync -a --delete $SRC_DIR/$div_dir/ $DST_DIR/$div_dir
touch $done_file
rm -f $lock_file
fi
fi
let proc_id++
done < $DIR_LIST~