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