web-dev-qa-db-ja.com

Rsync固有のパターンですが、同じパス内の他のファイルを除外します

/dapp/parsD/parsapp/objectにはたくさんのファイルがあります。 *。sql、*。plおよび*に一致するこのディレクトリ内のファイルのみをrsyncしたい。shですが、同じディレクトリ内で。shで終わる2つの特定のパターンも除外したいと思います。

これは可能ですか?ソースと宛先の両方でHP-UX 11iを実行しています。 rsyncバージョンは3.1.0です。

以下は視覚化するのが簡単かもしれません。開発サーバーでは、「x」または「[〜#〜] x [〜#〜]」はに置き換えられます'd'または '[〜#〜] d [〜#〜]'であり、本番サーバーでは次のようになります。 'p'または '[〜#〜] p [〜#〜]'。

次のファイルを含めます。

/xapp/parsX/parsapp/object/*.sql
/xapp/parsX/parsapp/object/*.pl
/xapp/parsX/parsapp/object/*.sh

ただし、次のファイルは除外してください。

 /xapp/parsX/parsapp/object/getbackdate*autosys.sh
 /xapp/parsX/parsapp/object/parssendevent*.sh
2
user64842

rsync include/exclude/filterルールは扱いにくい場合がありますが、最終的には非常に柔軟です。これがあなたがやりたいことをする一つの方法です:

rsync --include-from=- /xapp/parsX/parsapp/object/ dest_dir <<EOF
- getbackdate*autosys.sh
- parssendevent*.sh
+ *.sql
+ *.pl
+ *.sh
- *
EOF

--include-fromは、rsyncstdinからパターンを読み取らせます。これがないと、各パターンを個別の--includeまたは--excludeオプションとして指定できます。ルールをファイルに入れて名前を指定するか、-Fを使用して、読み取る各ディレクトリでrsync.rsync-filterファイルを検索させることもできます。

パターンの順序も重要であることに注意してください。ファイルは、それらに一致する最初のパターンに従って含まれる/除外されます。また、すべてがデフォルトで含まれているため、インクルードルールを機能させるには、最後の- *ルールが必要です。ただし、明示的に含まれていないすべてのディレクトリが除外されるため、再帰転送では問題が発生する可能性があります。これを回避する1つの方法は、すべてのディレクトリを含めるために+ **/ルールを含めることです。

1
Graeme