ので、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 |
現場からは以上です。