1
+ #! /bin/sh
2
+
3
+ # source env
4
+ APP_HOME=/home/yi-hack-v4
5
+ . $APP_HOME /etc/push.conf
6
+
7
+ # private key
8
+ KEY=$APP_HOME /.ssh/transfer-key
9
+
10
+ # dest server
11
+ SERVER=${DEST_USER} @${DEST_HOST}
12
+
13
+ # path to recordings
14
+ BASE=/tmp/sd/record
15
+ DAY=` date +%YY%mM%dD`
16
+ HOUR=` date +%H`
17
+ NOW=${DAY}${HOUR} H
18
+ MIN=` date +%M`
19
+ RECORD_PATH=$BASE /${DAY}${HOUR} H
20
+ if [ $MIN -gt 50 ]; then
21
+ # Each minute files are written, wait if at the end of the hour to capture all
22
+ sleep $(( 61 - $MIN )m
23
+ fi
24
+
25
+ usage() {
26
+ echo
27
+ echo "Usage: $0 -f [filepath] -h -t [datepath]"
28
+ echo "Where:"
29
+ echo " -f = filename path, eg: -f /tmp/log.txt"
30
+ echo " -h = publish all for the hour"
31
+ echo " -t = target hour, eg: 2020 Y07 M05 D11 H"
32
+ echo
33
+ exit 1
34
+ }
35
+
36
+ if [ "_$1 " = "_" ]; then
37
+ usage
38
+ fi
39
+
40
+ # parse options
41
+ file=
42
+ target_path=
43
+ while getopts "f:t:h" o; do
44
+ case "$o " in
45
+ f) file="$OPTARG ";;
46
+ t) file="$BASE /$OPTARG "; target_path="$OPTARG /";;
47
+ h) file=$RECORD_PATH ; target_path=$NOW /;;
48
+ [?]) usage
49
+ esac
50
+ done
51
+
52
+
53
+ #########################
54
+ # functions
55
+ #########################
56
+
57
+ check_exists() {
58
+ if [ ! -e $file ]; then
59
+ echo
60
+ echo "WARN: File [ $file ] does not exist"
61
+ echo
62
+ exit 1
63
+ fi
64
+ }
65
+
66
+ check_filesize() {
67
+ local=`ls -l $1 | awk '{print $5 }'`
68
+ remote=`ssh -i $KEY $SERVER ls -l $DEST_PATH /$target_path /$2 2 >/dev/null | awk '{print $5 }'`
69
+
70
+ if [ "_$local " = "_$remote " ]; then
71
+ return 0
72
+ else
73
+ return 1
74
+ fi
75
+ }
76
+
77
+ do_batch_scp() {
78
+ rm -f /tmp/remote.* /tmp/local.*
79
+ ssh -i $KEY $SERVER ls -l $DEST_PATH /$target_path / 2 >/dev/null | awk '{print $5 ,$9 }' > /tmp/remote.$$
80
+ if [ $? -ne 0 ]; then
81
+ return
82
+ fi
83
+ ls -l $file | awk '{print $5 ,$9 }' > /tmp/local.$$
84
+
85
+ for i in `cat /tmp/local.$$ | awk '{print $2 }'`; do
86
+ local_file=`cat /tmp/local.$$ | grep $i | awk '{print $1 }'`
87
+ remote_file=`cat /tmp/remote.$$ | grep $i | awk '{print $1 }'`
88
+ if [ "_$local_file " = "_$remote_file " ]; then
89
+ echo "INFO: Skipping [ $i ] File exists on remote"
90
+ else
91
+ do_scp $file /$i 0
92
+ fi
93
+ done
94
+ }
95
+
96
+ do_mkdir() {
97
+ ssh -i $KEY $SERVER mkdir -p $DEST_PATH /$target_path
98
+ }
99
+
100
+ do_scp() {
101
+ if [ "_$2 " = "_0 " ]; then
102
+ echo "INFO: Copying [ $1 ]"
103
+ scp -i $KEY $1 $SERVER :$DEST_PATH /$target_path
104
+ else
105
+ filename=`echo $1 | sed "s/.*\///"`
106
+ check_filesize $1 $filename
107
+ if [ $? -ne 0 ]; then
108
+ echo "INFO: Copying file [ $1 ]"
109
+ scp -i $KEY $1 $SERVER :$DEST_PATH /$target_path
110
+ else
111
+ echo "INFO: Skipping [ $1 ] File exists on remote"
112
+ fi
113
+ fi
114
+ }
115
+
116
+ # main function
117
+ main() {
118
+ check_exists $file
119
+ if [ -d $file ]; then
120
+ do_mkdir
121
+ do_batch_scp
122
+ else
123
+ do_scp $file
124
+ fi
125
+ }
126
+
127
+ # run!
128
+ main
0 commit comments