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