rsyncを使用した複雑な包含/除外


14

複雑な包含/除外を実行するためにrsyncフィルター構文を解決しようとしており、次のことを達成しようとしています。

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

私はフィルター構文で多くのバリエーションを試しましたが、マニュアルページを何度も読んでも、このような効果は得られません。Rsyncフィルターは非常に強力であるように思われ、このような一般的なシナリオを処理できなかったとは信じられません。

回答:


17

除外ルールを使用する前に、すべての親ディレクトリを目的のディレクトリまで含める必要があります。

たとえば、バックアップスクリプトで次を使用します。

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

そのため、次のようなものが必要になります。

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST

優秀な。しばらく時間がかかりました。
イクリアン

どういうわけか、私がを読んだときman rsync、私はミキシングの適切な順序に含まれるものと除外されるものを誤解しました。それは...それを把握するために私に時間を要した
アダム・ライチョースキー

6

コマンドラインで:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

削除--dry-runして機能させ、「DEST」を宛先に置き換え、必要に応じてソースと「/」にユーザーとホストを追加します。

ルールファイルから:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

の内容は/etc/rsync/somerules.rules次のとおりです。

+/ /home/user1
-/ /home/*

これらをテストする必要があり、いくつかの調整が必要になる場合がありますが、これで開始できます。


OK 質問に追加したより複雑なケースがあります。追加のインクルードは、サブディレクトリのシナリオでは機能しません。
ブライアンマシス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.