web-dev-qa-db-ja.com

1つのコマンドで複数のディレクトリにRsyncしますか?

作業ディレクトリを他の2つのディレクトリにrsyncしたい。 1つの宛先はバックアップ用で、もう1つの宛先はテスト用です。私はこれを試しました:

rsync -av --exclude='.git' source dest1,dest2

しかし、その後エラーが発生します-'dest1,dest2'ディレクトリが見つかりませんでした。したがって、これを1つのディレクトリパスとして認識しているように見えます。もちろん、異なる宛先ディレクトリでコマンドを2回実行しますが、これは合計であり、複数のコマンドを使用する必要なく常にrsyncを実行したいと考えています。

そのようなことをすることは可能ですか?

10
Andrius

おそらくforループを使用します:

for dest in dest1 dest2; do 
    rsync -av --exclude='.git' source $dest
done
4
Dan D.

推奨されるforループソリューションは機能しますが、大量のデータを転送している場合は、非常に遅くなります。これは、ディスク書き込みの速度に拘束されるジョブをシリアル化するためです。より良いが少し複雑な代替手段はGNU Parallelを使用することです:

http://www.gnu.org/software/parallel/

複数のrsync実行を並列化するコマンドを考え出すことができます。これは、同時にN個のディスクに書き込む場合、N倍高速になります。

ネットワークにバインドされた問題に対する同様の並列ソリューションを以下に示します。

https://stackoverflow.com/questions/24058544/speed-up-rsync-with-simultaneous-concurrent-file-transfers

2
Amin Ariana