rsync除外ディレクトリは機能しません。

rsync除外ディレクトリは機能しません。

Fedora 17 64ビットを実行していますが、rsync --exclude=/home/ben/<dir>期待どおりに機能しません。

私のホームディレクトリをサムドライブにコピーしようとしていますが、rsyncキャッシュファイルとビルドファイルを保持する特定のディレクトリを除外したいと思います。これは私が使用するコマンドです:

rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/

~/buildただし、 の内容はコピー~/.ccacheされていますrsync。私は何が間違っていましたか?

ベストアンサー1

rsync先行で始まるグローバルフィルタリングルールは次/のとおりです。固定転送のルートに。マニュアルページの「パターンルールの埋め込み/除外」セクションを引用すると、次のようになります。

パターンが / で始まる場合はファイル階層の特定の場所に固定され、そうでない場合はパス名の末尾と一致します。これは正規表現の前にある^に似ています。したがって、「/foo」は、「転送ルート」(グローバルルールの場合)またはマージされたファイルディレクトリ(ディレクトリ固有のルールの場合)の「foo」名と一致します。

コマンド(rsync ... -arv /home/ben home-ben/)でファイルは/home/ben/fooに転送されますhome-ben/ben/foo。転送ルートはhome-ben、正しいフィルタパスはです/ben/foo。したがって、

  • 一致させるには/home/ben/.ccacheフィルタパスが必要です。/ben/.ccache
  • 一致させるには/home/ben/build/フィルタパスが必要です。/ben/build/

詳細な説明は、「アンカー埋め込み/除外パターン」セクションで確認できます。rsync(1)マニュアルページ


単に先行を省略することは/必ずしも望むわけではありません。同じマニュアルページセクションを再引用すると、次のようになります。

正規化されていない「foo」は、アルゴリズムが上から下に再帰的に適用されるため、ツリー内のどの場所でも「foo」名と一致します。各パスコンポーネントがファイル名の終わりであるかのように動作します。固定されていない「sub / foo」でも、「sub」というディレクトリに「foo」が見つかった階層のすべてのポイントと一致します。トランスポートルートで一致させるパターンを指定する方法の詳細については、「アンカー埋め込み/除外パターン」のセクションを参照してください。

したがって、フィルタパターンはbuild/ビルドディレクトリの任意の場所で一致します。/home/ben/home/ben/many/sub/directories/build/

おすすめ記事