色々研究
以下のディレクトリ構造の中から ./dA0 , ./dA1/dB1 , ./dA2/dB1/dC1/以下の全てのファイルを取得したい。
. ├── dA0 │ ├── dB0 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dB1 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dB2 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt ├── dA1 │ ├── dB0 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dB1 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dB2 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt └── dA2 ├── dB0 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt ├── dB1 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt └── dB2 ├── dC0 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt ├── dC1 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt └── dC2 ├── f0.txt ├── f1.txt └── f2.txt 39 directories, 81 files
各種のrsyncは以下の通りとなる。
rsync -n -av --include="/dA0/" --include="/dA0/" --exclude="" ./ ../testout rsync -n -av --include="/dA1/" --include="/dA1/dB1" --include="/dA1/dB1/" --exclude="" ./ ../testout rsync -n -av --include="/dA2/" --include="/dA2/dB1/" --include="/dA2/dB1/dC1/" --include="/dA2/dB1/dC1/*" --exclude="" ./ ../testout
全部まとめると
rsync -n -av --include="/dA0/" --include="/dA0/" --include="/dA1/" --include="/dA1/dB1" --include="/dA1/dB1/" --include="/dA2/" --include="/dA2/dB1/" --include="/dA2/dB1/dC1/" --include="/dA2/dB1/dC1/*" --exclude="" ./ ../testout
簡単に解説
–include / –exclude の内容
最初が
| 最初の文字 | 例 | 内容 |
| /から始まると | /foo | 先頭比較マッチ |
| /以外 | foo | 後方比較マッチ |
最後が
| 最後の文字 | 例 | 内容 |
| /でない | foo | foo というファイル1個 |
| / | foo/ | foo/ だけ |
| /* | foo/* | foo/ のディレクトリ1段分 |
| /** | foo/** | 再帰して取得 |
書いてある順に比較される
コピー対象になるにはヒットし続けなくてはならない。
ディレクトリの一部が欲しい場合
そこまで単品で include していかなくてはならない。以下の様に途中を抜かすと、dB1等が判定に現れないため、dC1/まで到達しない。
rsync -n -av --include="/dA2/ --include="/dA2/dB1/dC1/*" --exclude="" ./ ../testout
最後の–exclude=”*”は無いと全てがコピーされる。
途中のcacheディレクトリをコピーしたくない
. ├── dA0 │ ├── dB0 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dB1 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dB2 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ ├── f2.txt │ │ └── temp │ │ ├── 0.tmp │ │ ├── 1.tmp │ │ ├── 2.tmp │ │ ├── 3.tmp │ │ ├── 4.tmp │ │ ├── 5.tmp │ │ ├── 6.tmp │ │ ├── 7.tmp │ │ ├── 8.tmp │ │ └── 9.tmp │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt ├── dA1 │ ├── dB0 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dB1 │ │ ├── cache │ │ │ ├── 0.swp │ │ │ ├── 1.swp │ │ │ ├── 2.swp │ │ │ ├── 3.swp │ │ │ ├── 4.swp │ │ │ ├── 5.swp │ │ │ ├── 6.swp │ │ │ ├── 7.swp │ │ │ ├── 8.swp │ │ │ └── 9.swp │ │ ├── dA2 │ │ │ └── dB2 │ │ │ └── dC2 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dB2 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt ├── dA2 │ ├── dB0 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dB1 │ │ ├── dC0 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ ├── dC1 │ │ │ ├── f0.txt │ │ │ ├── f1.txt │ │ │ └── f2.txt │ │ └── dC2 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dB2 │ ├── dC0 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ ├── dC1 │ │ ├── f0.txt │ │ ├── f1.txt │ │ └── f2.txt │ └── dC2 │ ├── f0.txt │ ├── f1.txt │ └── f2.txt └── txt11.txt 44 directories, 102 files
独特の除外ディレクトリは最初の方のに入れる。
rsync -n -av --exclude="cache/" --exclude="temp/" ./ ../testout
全部まとめると下記の通りとなる。
rsync -n -av --exclude="cache/" --exclude="temp/" --include="/dA0/" --include="/dA0/" --include="/dA1/" --include="/dA1/dB1" --include="/dA1/dB1/" --include="/dA2/" --include="/dA2/dB1/" --include="/dA2/dB1/dC1/" --include="/dA2/dB1/dC1/*" --exclude="" ./ ../testout
参考
仮のディレクトリ構造の作成用.py
'''
for i in range(3):
for j in range(3):
for k in range(3):
print("mkdir -p dA" + str(i)+"/dB" + str(j)+"/dC" + str(k))
for l in range(3):
print("touch dA" + str(i)+"/dB" + str(j)+"/dC" + str(k)+"/f" + str(l)+".txt")
'''
"""
print("mkdir -p temp")
for l in range(10):
print("touch temp" +"/" + str(l)+".tmp")
"""