2つのコードベースを同期したい。以下のコマンドは、異なる場所にtestという名前の2つのディレクトリがある1つのユースケースを考慮していないことを除いて、うまく機能しています。
$ rsync -avCz --delete-before --progress --exclude=test /tmp/codebase/ .
私がやりたいのは、/ testディレクトリをrsyncから完全に除外することですが、/ start/testをrsyncする必要があります。
Rsyncに引数として渡す必要のある静的なTXTファイルを考え出す必要はありません。それ以外の方法でこれを実現する方法はありますか?- -include VS -excludeおよび末尾のスラッシュ(-exclude = test /)は機能しませんでした私の予想通り。
先頭の/
を使用して、転送のルートでのみ一致させることができます。これを試して:
rsync -avCz --delete-before --progress --exclude=/test/ /tmp/codebase/ .
主要な/
のmanページスニペットは次のとおりです。
パターンが/で始まる場合は、ファイルの階層内の特定の場所に固定されます。それ以外の場合は、パス名の末尾と照合されます。これは、正規表現の先頭の^に似ています。したがって、「/ foo」は、「転送のルート」(グローバルルールの場合)またはマージファイルのディレクトリ(ディレクトリごとのルールの場合)のいずれかで「foo」の名前と一致します。アルゴリズムは上から下に再帰的に適用されるため、修飾されていない「foo」はツリー内の任意の場所の「foo」の名前と一致します。各パスコンポーネントがファイル名の終わりになったかのように動作します。アンカーされていない「sub/foo」でさえ、「sub」という名前のディレクトリ内で「foo」が見つかった階層内の任意のポイントで一致します。
そして、末尾の/
の場合:
パターンが/で終わる場合、通常のファイル、シンボリックリンク、またはデバイスではなく、ディレクトリにのみ一致します。
あなたのコメントから、あなたも--delete-excluded
オプションを探していると思います。