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


34

複数のソースをrsyncしたいのですが、それを実現する最良の方法はないでしょうか。

例えば

/etc/fstab
/home/user/download

私は3つのソリューションについて考えました:

  • 解決策1

rsyncの複数呼び出し

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

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

  • 解決策2

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

sync -aL /home/user/tobackup bkp

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

  • 解決策3

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

rsync -a /home/user/tobackup bkp

con:いくつかの手動設定

どちらをお勧めしますか?

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


回答:


33

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

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がトラバースし/etc/homeコピーするファイルを探すときに)およびすべてのトップレベルディレクトリを/*/*/(forで/home/user)含めますが、ファイルがコピーされないディレクトリを取り除きます。親を明示的にリストする必要がないため、これはより便利です。--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
    

1
素晴らしいが、ディレクトリ構造をbkp内に保持する方法は?
ロドリゴ

つまり、bkp / etc / fstabとbkp / home / user / dowlonadですか?それとも/ bkp / fstabとbkp / downloadですか?
ロドリゴ

@ロドリゴ私は私の答えを編集しました
ジル「SO-悪であるのをやめる」

13

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ます。


2

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

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

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

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

これでsshポートをどのように指定しますか?使用するときに構文が動作するようには思えない-e
tcurdt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.