次のディレクトリ構造を考えると:
$ 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
ので見つかりません。解決策は、以下を明示的に含めることです。rsync
b/c
b
rsync -av -n --include='b/' --include="b/c/***" --exclude="*" source/ target
- ディレクトリを含める
b
- 目次
b/c
と以下のすべての内容が含まれています。c
- すべてを除く(その他)