-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathprsync
executable file
·61 lines (53 loc) · 1.24 KB
/
prsync
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
#!/bin/bash
# Original Source: https://wiki.ncsa.illinois.edu/display/~wglick/Parallel+Rsync
DRYRUN=0
VERBOSE=0
THREADS=8
while getopts "s:d:t:vn" opt; do
case $opt in
s)
SRCDIR=$OPTARG
;;
d)
DESTDIR=$OPTARG
;;
t)
THREADS=$OPTARG
;;
n)
DRYRUN=1
;;
v)
VERBOSE=1
;;
h|help)
echo "Usage: $0 [s|d|t]"
exit 1
;;
*)
echo "Usage: $0 [s|d|t]"
exit 1
esac
done
if [ $VERBOSE -eq 1 ]; then
echo "SRCDIR: $SRCDIR"
echo "DESTDIR: $DESTDIR"
echo "THREADS: $THREADS"
fi
# RSYNC DIRECTORY STRUCTURE
if [ $DRYRUN -eq 1 ]; then
echo "rsync -vr -f"+ */" -f"- *" $SRCDIR/ $DESTDIR/"
else
rsync -vr -f"+ */" -f"- *" $SRCDIR/ $DESTDIR/
fi
# FOLLOWING MAYBE FASTER BUT NOT AS FLEXIBLE
# cd $SRCDIR; find . -type d -print0 | cpio -0pdm $DESTDIR/
# FIND ALL FILES AND PASS THEM TO MULTIPLE RSYNC PROCESSES
if [ $DRYRUN -eq 1 ]; then
echo "cd $SRCDIR; find . ! -type d -print0 | xargs -0 -n1 -P$THREADS -I% rsync -av % $DESTDIR/% "
else
cd $SRCDIR; find . ! -type d -print0 | xargs -0 -n1 -P$THREADS -I% rsync -av --no-g % $DESTDIR/%
fi
# IF YOU WANT TO LIMIT THE IO PRIORITY,
# PREPEND THE FOLLOWING TO THE rsync & cd/find COMMANDS ABOVE:
# ionice -c2