rsyncに入れ子になったディレクトリが含まれないのはなぜですか?

rsyncに入れ子になったディレクトリが含まれないのはなぜですか?

次のディレクトリ構造を考えると:

$ cd /home/user/test/
$ mkdir -p source/b/c/
$ touch source/b/c/d.txt
$ tree source/
source/
└── [4.0K]  b
    └── [4.0K]  c
        └── [   0]  d.txt

このコマンドが期待どおりにフォルダをコピーする理由は次のとおりです。

$ pwd
/home/user/test/
$ rsync -av -n --include="b/***" --exclude="*" source/ target
sending incremental file list
created directory target
./
b/
b/c/
b/c/d.txt

sent 141 bytes  received 59 bytes  400.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

しかし、それはうまくいきませんか?

$ pwd
/home/user/test/
$ rsync -av -n --include="b/c/***" --exclude="*" source/ target
sending incremental file list
./

sent 59 bytes  received 19 bytes  156.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

私が偶然見つけた方法:ディレクトリ全体の構造を維持しながら、いくつかの変更可能な入れ子になったディレクトリを同期しようとしました。

より具体的な包含規則がどのようなものとも一致しないのはなぜですか?

答え1

最初の例

rsync -av -n --include="b/***" --exclude="*" source/ target
  • ディレクトリbとその下のすべてのエントリを含みます。
  • すべてを除く(その他)

だからbその子供たちはバックアップされました。

2番目の例

rsync -av -n --include="b/c/***" --exclude="*" source/ target
  • 目次b/cと以下のすべての内容が含まれています。c
  • すべてを除く(その他)

ここで問題は含まれていないbので見つかりません。解決策は、以下を明示的に含めることです。rsyncb/cb

rsync -av -n --include='b/' --include="b/c/***" --exclude="*" source/ target
  • ディレクトリを含めるb
  • 目次b/cと以下のすべての内容が含まれています。c
  • すべてを除く(その他)

関連情報