マニュアル ページには、これに関する例はありません。rsync に、これらのファイルを含むファイルだけを含めるように指示するのに苦労しています。含めるために除外する必要がある理由、rsync
インクルード ファイルにあるものをすべて含めず、それ以外はすべて除外する必要がある理由がわかりません。
これが私のスクリプトです:
rsync -ruv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir remoteSrv:/tmp/.
これは動作しないインクルード ファイルです。コピーが多すぎます。/usr2/subdir 内のすべてのものがコピーされます (ディレクトリを含むsubdir
、奇妙です)。これは不要です。ディレクトリ内の per、42f、および xml ファイルのみをコピーしたいのですdata/text_forms
。
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
次は機能せず、何もコピーされません。
- *
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
以下も機能せず、何もコピーされません。
- *
+ data/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
以下も機能せず、何もコピーされません。
- *
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
以下も機能しません:
+ */
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
以下のいずれも機能しません:
+ /data/
+ /data/text_forms/
+ /data/text_forms/*.per
+ /data/text_forms/*.42f
+ /data/text_forms/*.xml
+ /data/text_forms/*.xml.*
- *
答え1
解決策を見つけました。それを見つけるのに丸2日かかりました。この情報が、皆さんがそれほど多くの時間を費やさなくて済む助けになれば幸いです。
subdir
最初の問題は、のサブディレクトリ/usr2/subdir
が含まれていて、そのディレクトリ全体を含めるのではなく、それをベース ディレクトリにしたいだけだったため、 のように最後にスラッシュが必要になり/usr2/subdir/
、新しいコマンドは次のようになることです。
rsync -ruvv --rsh=ssh --include-from=zz-rsync-test.prod.incl /usr2/subdir/ remoteSrv:/tmp/.
コマンド実行時に何が除外され、何が含まれたかの詳細を取得するために、v
コマンドラインに追加オプション ( ) を追加したことに注意してください。ベース ディレクトリを固定し、追加することで、適切なインクルード ファイルを作成するのが少し簡単になりました。-ruvv
v
+ data/
+ data/text_forms/
+ data/text_forms/*.per
+ data/text_forms/*.42f
+ data/text_forms/*.xml
+ data/text_forms/*.xml.*
- *
すべての+
行は の前に配置する必要があります- *
。特にディレクトリの場合は、それらのディレクトリ内のファイルを直接取得したくない場合でも、スキャンする各ディレクトリを明示的に含める必要があるためです。 と を追加してテストを実行しましたが、data/anyTestFile1
これらdata/text_forms/anyTestFile2
が取得されるかどうかわからなかったので、取得されませんでした。つまり、ようやく目的の動作が実現しました。