なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

rsyncで圧縮転送したいけどpigzみたいに並列にならなくて困る

ので、tarとsshをパイプでつないで並列で圧縮しながら転送する君を作りました。

tar には指定したファイルのみをアーカイブに含める -T オプションがあるので、 rsync -nの結果をリストにして渡すことで、rsyncの対象になるファイルだけを転送できるようにしてます。

#!/bin/bash -x
FROM="$1"
REMOTE=$(echo $2 | cut -d: -f1)
TO=$(echo $2 | cut -d: -f2)
TMPFILE=$(mktemp)
ssh $REMOTE "mkdir -p $TO"
rsync -avn $FROM $REMOTE:$TO | grep -v '/$' | tail -n +3 | tac | tail -n +4 | tac > $TMPFILE
cd $FROM; tar cvf - --use-compress-prog=pigz -T $TMPFILE | ssh $REMOTE "tar xzvf - -C $TO"
rsync -av $FROM $REMOTE:$TO
view raw pigz_rsync.sh hosted with ❤ by GitHub

現場からは以上です。