web-dev-qa-db-ja.com

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

私は複数のソースをrsyncしたいのですが、それを達成するための最良の方法を考えています。

例えば.

/etc/fstab
/home/user/download

私は3つの解決策について考えました:

  • 解決策1

rsyncへの複数の呼び出し

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

con:統計を集約するのが難しい

  • 解決策2

symlinkを含むtobackupフォルダーを作成し、-Lオプションを使用します

sync -aL /home/user/tobackup bkp

con:バックアップするコンテンツにシンボリックリンクを含めることはできません

  • 解決策3

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

rsync -a /home/user/tobackup bkp

con:手動設定

どれがお勧めですか?

より良い方法はありますか?

39
user1437346

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

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

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

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

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • /*/を含むすべてのトップレベルディレクトリ(コピーするファイルを探すときにrsyncが/etc/homeをトラバースする)と/*/*//home/userを含む)を含む2番目のレベルのディレクトリを含めますが、ファイルがコピーされないディレクトリは削除します。親を明示的にリストする必要がないため、これはより便利です。レベルの数をカウントする代わりに--Prune-empty-dirs --include='*/'を使用することもできますが、ここでは、rsyncがファイルシステム全体をトラバースしてディレクトリを探索するため、/etcおよび/home/user/download以外の一致ルールはないため、これは実際的ではありません。

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

Gillesの回答は本当に気に入っていますが、ディレクトリ構造を維持しながら複数のフォルダを同期する要件は、--relativeオプションと組み合わせて複数のソース引数を渡すことで最もよく満たされると私は考えています。

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

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

これはbkp/etc/fstabbkp/home/user/downloadになります。

これについての最良の部分は、(rsync v。2.6.7以降、私は基本的に)レシーバーで複製するディレクトリ構造の量を制御できることです。
--relativeオプションのドキュメントを参照 ここ

したがって、たとえばもし私たちがこれをしたなら

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

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

17
Christoph

これも機能します-ソースのコンマ区切りリストを含む中括弧。

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

中括弧sytnaxをcpおよび他の特定のユーティリティを使用して呼び出すと、何が起こるかに似ています。

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