複数のソースフォルダをrsyncする方法

複数のソースフォルダをrsyncする方法

複数のソースを rsync したいのですが、それを実現する最善の方法が知りたいです。

例えば

/etc/fstab
/home/user/download

私は3つの解決策を考えました:

  • 解決策1

rsync への複数の呼び出し

rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp

欠点: 統計を集計するのが難しい

  • 解決策2

シンボリックリンクを含むフォルダを作成しtobackup-Lオプションを使用する

sync -aL /home/user/tobackup bkp

欠点: バックアップするコンテンツにシンボリックリンクが含まれていてはならない

  • 解決策3

ファイルをバックアップに移動し、元の場所にシンボリックリンクを作成します。

rsync -a /home/user/tobackup bkp

欠点: 手動設定が必要

どれがお勧めですか?

もっと良い方法はあるでしょうか?

答え1

複数のソース引数を渡すことができます。

rsync -a /etc/fstab /home/user/download bkp

これにより、別個のコマンドと同様に、bkp/fstabと が作成されます。代わりにソース構造を保持することが望ましい場合があります。これを行うには、をソースとして使用し、 を使用します。bkp/download/包含・除外ルールコピーするファイルを指定します。これを行うには 2 つの方法があります。

  • /***ディレクトリ ツリー全体をコピーする場合は、ディレクトリの末尾に を指定して、各ファイルとそれに至る各ディレクトリ コンポーネントを明示的に含めます。

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • ですべてのトップレベルディレクトリを含めます(rsyncがコピーするファイルを探すときにと を/*/走査するように)。 で第 2 レベルのディレクトリを含めます( の場合)。ただし、ファイルがコピーされないディレクトリは除外します。親を明示的にリストする必要がないため、この方が便利です。レベル数をカウントする代わりに を使用することもできますが、ここでは実用的ではありません。なぜなら、どのインクルードルールも との外側に一致しないにもかかわらず、rsync はディレクトリを探索するためにファイルシステム全体を走査するからです。/etc/home/*/*//home/user--prune-empty-dirs --include='*/'/etc/home/user/download

    rsync -a --prune-empty-dirs \
        --include='/*/' --include='/*/*/' \
        --include=/etc/fstab \
        --include='/home/user/download/***' \
        --exclude='*' / bkp
    

答え2

私は Gilles の回答に非常に満足していますが、私の見解では、ディレクトリ構造を維持しながら複数のフォルダーを同期するという要件は、オプションと組み合わせて複数のソース引数を渡すことによって最もよく満たされるということを付け加えておきたいと思います--relative

この場合、次のようになります。

rsync -aR /etc/fstab /home/user/download bkp

その結果、bkp/etc/fstabおよび が生まれますbkp/home/user/download

これの最も優れた点は、(rsync v. 2.6.7以降だと思いますが)宛先に複製するディレクトリ構造の量を本質的に制御できることです。 (オプション
のドキュメントを参照してください。--relativeここ

例えばこれをやると

rsync -aR /home/./user1/download /home/./user2/download bkp

bkp/user1/download最終的にはおよびになりますbkp/user2/download

答え3

これも機能します - 中括弧で囲まれた、ソースのコンマ区切りリストが含まれます。

rsync -vap --progress --stats root@server:{/etc,/root/backups,/home/ultralazer} /mnt/bigdrive

これは、cp やその他の特定のユーティリティを使用して中括弧構文を呼び出したときに発生するものと多少似ています。

cp -vr /etc /root/backups /home/{ultralazer,zerocool} /mnt/bigdrive

関連情報