を使って次のことをしたいと思いますrsync
。
ディレクトリ構造の例
- ホーム/netadmin/docker-data
- ホーム/netadmin/docker-data/uptime-kuma/
- ホーム/netadmin/docker-data/uptime-kuma/error.log
rsync
ディレクトリがdocker-data
欲しいが、home/netadmin/docker-data/uptime-kuma/
ディレクトリを除外したいがhome/netadmin/docker-data/uptime-kuma/error.log
。
次のコマンドを使用しています。
rsync -av --delete --include-from='/home/netadmin/include.txt' --exclude-from='/home/netadmin/exclude.txt' /home/netadmin/docker-data /home/netadmin/temp/
ディレクトリは除外されますが、ファイルはコピーされません。
私の質問はこれが可能ですか?
私のインクルードと除外ファイルは次のとおりです。
除外.txt
uptime-kuma/
.txtを含みます
+ error.log
答え1
その「トリック」はいいえディレクトリは除外しますuptime-kuma
が、内容は除外しません。
インクルードおよび除外パターンを使用すると、error.log
そのサブディレクトリ内の他のすべてのエントリを除外する前にuptime-kuma/*
ファイルを含めることができます。uptime-kuma/error.log
uptime-kuma/
代わりにを使用すると、uptime-kuma/*
ディレクトリを除いてrsync
ディレクトリ内を決して表示できません。
rsync -av --delete \
--include=error.log \
--exclude='uptime-kume/*' \
~netadmin/docker-data ~netadmin/temp/
私はこれが同等のテストになることを願っています:
$ tree
.
`-- topdir
|-- file-1
|-- file-2
|-- file-3
|-- file-4
|-- file-5
`-- subdir
|-- file-a
|-- file-b
|-- file-c
|-- file-d
|-- file-e
`-- myfile
2 directories, 11 files
$ rsync -av --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
created directory copydir
./
file-1
file-2
file-3
file-4
file-5
subdir/
subdir/myfile
sent 436 bytes received 171 bytes 1,214.00 bytes/sec
total size is 0 speedup is 0.00
$ tree copydir
copydir
|-- file-1
|-- file-2
|-- file-3
|-- file-4
|-- file-5
`-- subdir
`-- myfile
1 directory, 6 files
ヒント:rsync
使用すると、どの項目が含まれているか除外される理由を理解できます-vv
。
「error」を使用した除外パターンは次のとおりです。
$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/' topdir/ copydir
sending incremental file list
[sender] hiding directory subdir because of pattern subdir/
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
total: matches=0 hash_hits=0 false_alarms=0 data=0
sent 326 bytes received 211 bytes 1,074.00 bytes/sec
total size is 0 speedup is 0.00
これは「正しい」除外パターンを使用しています。
$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
[sender] hiding file subdir/file-a because of pattern subdir/*
[sender] hiding file subdir/file-b because of pattern subdir/*
[sender] hiding file subdir/file-c because of pattern subdir/*
[sender] hiding file subdir/file-d because of pattern subdir/*
[sender] hiding file subdir/file-e because of pattern subdir/*
[sender] showing file subdir/myfile because of pattern myfile
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
[generator] risking file subdir/myfile because of pattern myfile
subdir/
subdir/myfile
total: matches=0 hash_hits=0 false_alarms=0 data=0
sent 436 bytes received 307 bytes 1,486.00 bytes/sec
total size is 0 speedup is 0.00
答え2
別の方法が見つかりました。私は使う
cp --parents
私が望む除外ディレクトリ内の特定のファイルだけをコピーし、ディレクトリ構造を維持するオプションです。