特定のディレクトリツリーの特定のファイルタイプのみを含むフィルタを使用したrsync

特定のディレクトリツリーの特定のファイルタイプのみを含むフィルタを使用したrsync

私のrsyncコマンドは次のとおりです。

rsync --update -rav --filter="merge $HOME/mergefilter.txt" ~/ (remote_destination):~/

私のmergefilter.txtファイルは次のとおりです。

+ /directory_1/***
+ /directory_2/***
+ /directory_etc/***
- /**

コマンドはrsync正しく機能し、指定されたディレクトリツリーのすべてのエントリを更新します。しかし、私はそれにいくつかの詳細を追加したいと思います。必要な構文はわかりませんが、私のディレクトリツリーの1つに特定のファイルだけを含めたいと思います。たとえば、mergefilter.txtが次のように動作すると想像してみてください。

+ /directory_1/***
+ /directory_2/*** --include="*.c++" --include="*.h" 
+ /directory_etc/***
- /**

この方法でDirectory_2ディレクトリツリー(およびそのサブディレクトリ)を同期すると、.c ++ファイルと.hファイルのみが更新されます。

同様の質問をする他のスタック交換ページを見ましたが、includeフィルタファイルを使用するときにこれを行う方法を示すページはありません。ここで正しい構文は何ですか?

ベストアンサー1

すでに使用していますinclude。で始まるすべての行+はインクルードルール-です。

ディレクトリに特定のファイルだけを含めるには、残念ながらスペルを入力する必要があります。フィルタファイルは次のとおりです。

+ /dir_1/***
+ /dir_2/
+ /dir_2/**.c++
+ /dir_2/**.h
+ /dir_2/**/
- /dir_2/**
+ /dir_etc/***
- /*

dir_2まず、次のものが含まれていることを確認する必要があります+ /dir_2/

*.c++次に、その中にすべての*.hファイルが含まれます。スラッシュを含むすべての文字を一致させる必要があることをdir_2忘れないでください。**

dir_2次に、すべてのディレクトリを:に含める必要があります+ /dir_2/**/。そうしないと、そのサブディレクトリが除外されるため、サブディレクトリのファイルが見つかりません。

最後に、他のすべてのファイルを除外します。

ディレクトリごとにマージファイルを使用することもできるため、rsyncは各ディレクトリで指定されたファイル名を解決し、見つかった場合、そのファイルをそのディレクトリの追加フィルタとして使用します。-Fオプションについてはマンページを参照してください。

おすすめ記事