複数のルートを持つrdist構成をrsyncに変換する

複数のルートを持つrdist構成をrsyncに変換する

rsyncに似たrdist構文を実装しており、rsyncを使用してファイルとフォルダを同期できますが、このrdist構文の処理中にこの部分を理解できず、私のexcept (/home/user1/log1/*/*/sql.net /home/user1/log1/*/*/core)rdistインクルードファイルは次のとおりです。FILES=(/home/user1/log1 /home/user1/rightlog)

rsyncでこれをどのように達成できますか?私はこれを試しましたrsync -rtu --exclude='/log1/*/*/sql.net' exclude='/log1/*/*/core' $FILES remote@host:$FILES

正確なrdistを複製する必要がありますか、それとも追加の調整が必要ですか?目的の出力が得られず、時にはsql.net別のフォルダにある可能性があるため、これを行うことはできません--exclude=sql.net

答え1

除外リストがない場合、これは機能rsync $FILES remote@host:$FILESしません。rsync /home/user1/log1 /home/user1/rightlog remote@host:/home/user1/log1 /home/user1/rightlogターゲットに拡張されます/home/user1/rightlog(しかし、rsyncはローカルソースとリモートソースを混在していると文句を言います)。

rsyncを使用して複数のソースを指定できますが、すべて同じターゲットにコピーされ、除外リストなどのパラメータがすべてのソースに適用されます。

異なるサブツリーに異なるパラメータが必要な場合は、rsyncを別々に呼び出す必要があります。他のパラメータが必要ない場合は、共通ルートを同期しますが、同期する部分のみを含めます。

rsync --include='/log1' --include='/rightlog' --exclude='/*' /home/user1 remote@host:/home/user1

別の除外リストを取得するために個別のrsync呼び出しは必要ありません。なぜなら、先行パスコンポーネントだけを含めればよいからです。

rsync --include='/log1' --include='/rightlog' --exclude='/*' \
      --exclude='/log1/*/*/sql.net' --exclude='/log1/*/*/core' \
      /home/user1 remote@host:/home/user1

関連情報