私は複数のソースをrsyncしたいのですが、それを達成するための最良の方法を考えています。
例えば.
/etc/fstab
/home/user/download
私は3つの解決策について考えました:
rsyncへの複数の呼び出し
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con:統計を集約するのが難しい
symlinkを含むtobackup
フォルダーを作成し、-L
オプションを使用します
sync -aL /home/user/tobackup bkp
con:バックアップするコンテンツにシンボリックリンクを含めることはできません
ファイルをバックアップに移動し、元の場所にシンボリックリンクを作成します
rsync -a /home/user/tobackup bkp
con:手動設定
どれがお勧めですか?
より良い方法はありますか?
複数のソース引数を渡すことができます。
rsync -a /etc/fstab /home/user/download bkp
これにより、指定した個別のコマンドのように、bkp/fstab
とbkp/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/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
になります。
これも機能します-ソースのコンマ区切りリストを含む中括弧。
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