我想用 执行以下操作rsync
。
目录结构示例
- 家/netadmin/docker-数据
- 家/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
。
这是使用“错误”的排除模式:
$ 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
选项仅复制我想要的排除目录中的特定文件,并保留目录结构。