rsync 並列実行

find xargs

find ${source_dir}  -mindepth 1 -maxdepth 1 | xargs -P 24 -I {} rsync --archive --perms --owner --group --xattrs --acls --recursive --delete --compress --log-file=<logfile_path> -quiet -e ssh {} <destination_user>@<destination_instance>:<destination_dir>

ファイルのコピー時にRSYNCが遅くなる

ex.

find /var -mindepth 1 -maxdepth 1
/var/cron
/var/empty
/var/at
...

rsync ... -e ssh /var/cron <destination_user>@<destination_instance>:/var
rsync ... -e ssh /var/empty <destination_user>@<destination_instance>:/var
rsync ... -e ssh /var/at <destination_user>@<destination_instance>:/var

スラッシュなし:rsync -av /SRC/A /DEST/

一方、スラッシュなしで/SRC/Aと指定した場合、ディレクトリA本体を表わします。
したがって、この場合は、”ディレクトリAをどこへ置くのか?”と考えて、受信先のパスを選べばいいわけです。
ここでディレクトリAを置きたいのは/DEST/です。だからそのように指定しています。
このように、この構文はディレクトリ本体を操作しているイメージです。
...
送信元の末尾/有無の違い
受信先の末尾/有無はどちらもでいい

[Shell] rsyncはスラッシュ/の有無で何が変わるのか? 2018

ls -1 /path/to/src | xargs -I {arg} -P 6 -n 1 rsync -avh /path/to/src/{arg} /path/to/dest

s -1 エルではなく1 xargs に渡すために 1行に1ファイル(フォルダ)出力
↓パイプ
-I {arg} で引数を置換する文字列を {arg} として
-P 6 で並列数を6として指定して
-n 1 で渡される引数の数を念の為1個に限定して
rsync -avh /path/to/src/{arg} /path/to/dest {arg}を引数で置換して実行

rsyncをxargsを使って並列実行 - 飛光よ、飛光よ 2018

2.実行されるコマンド内容を表示させる
xargsで指定されたコマンドの実行内容を表示させるには、「-t」オプションを付与する。

 コマンド1 | xargs -t コマンド2

xargsコマンドで覚えておきたい使い方・組み合わせ7個(+1個) | 俺的備忘録 〜なんかいろいろ〜 2015


https://bacchi.me/bash/grouping/

find . \( -type d -printf "%p/\n" , -type f -print \)

https://unix.stackexchange.com/questions/4847/make-find-show-slash-after-directories

${変数名//置換前文字列/置換後文字列} → 文字列置換(マッチしたものすべて)

shとbashでの変数内の文字列置換など - ろば電子が詰まつてゐる

[rsync] 同期を並列に行う - R.A. Epigonos et al. 2010

https://superuser.com/questions/353383/parallelizing-rsync 2011