This repository was archived by the owner on Feb 24, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsync_mirror.sh
More file actions
42 lines (32 loc) · 1.26 KB
/
sync_mirror.sh
File metadata and controls
42 lines (32 loc) · 1.26 KB
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
#!/bin/bash
set -eu # fail on errors and undefined variables
mirror="${1}"
cygDist="${2}"
mirrorParallelism="${3:-3}"
parallel_rsync() {
rsyncJobs="${1}"
sourceDir="${2}"
targetDir="${3}"
parallel --verbose --progress -j "${rsyncJobs}" --delay 5 \
--joblog parallel_rsync_job.log --results {}_results \
rsync --files-from={} -va --delete --delete-excluded --delete-after \
--exclude='*mail-archives*' --exclude='*src.tar.bz2' --exclude='*src.tar.xz' \
"${sourceDir}" "${targetDir}"
}
mkdir -p ${cygDist}
TMPDIR=$(mktemp -d)
(
cd ${TMPDIR}
filesList="${TMPDIR}/files.lst"
chunkPrefix="chunk."
chunkSplits=30
echo "Creating file list"
rsync -va --no-motd --dry-run --exclude='*mail-archives*' --exclude='*src.tar.bz2' --exclude='*src.tar.xz' \
--exclude='x86_64/' ${mirror} ${cygDist} | head --lines=-3 | tail --lines=+3 > ${filesList}
echo "Found $(wc -l ${filesList}) files and directories"
echo "Splitting ${filesList} into ${chunkSplits} chunks"
split --number="l/${chunkSplits}" ${filesList} ${chunkPrefix}
echo "Executing parallel rsync (jobs=${mirrorParallelism}) ${mirror} ${cygDist}"
find . -type f -name "${chunkPrefix}*" | parallel_rsync ${mirrorParallelism} ${mirror} ${cygDist}
)
echo "Done"