如何使用 排除除特定文件之外的所有文件rsync
?
我尝试仅使用 , 备份特定文件rsync
,以排除所有文件,但某些特定文件(即文件)除外.md
,并且所有这些页面中的解决方案对我不起作用:
- https://velenux.wordpress.com/2017/01/09/how-to-exclude-everything- except-a-specific-pattern-with-rsync/
- https://superuser.com/questions/1637543/how-to-specify-no-files- except-这些-extensions-in-rsync
- https://serverfault.com/questions/1063730/rsync-exclude-all-files-in-dir- except-specific-files
$ rsync -vua --exclude="*" --include="*.md" ../log ./
sending incremental file list
sent 19 bytes received 12 bytes 62.00 bytes/sec
total size is 0 speedup is 0.00
$ rsync -vua --include="*.md" --exclude="*" ../log ./
sending incremental file list
sent 19 bytes received 12 bytes 62.00 bytes/sec
total size is 0 speedup is 0.00
$ du -sh ../log
1016M ../log
$ apt-cache policy rsync
rsync:
Installed: 3.2.7-0ubuntu0.22.04.2
Candidate: 3.2.7-0ubuntu0.22.04.2
Version table:
*** 3.2.7-0ubuntu0.22.04.2 500
500 http://ca-toronto-1-ad-1.clouds.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
100 /var/lib/dpkg/status
3.2.3-8ubuntu3 500
500 http://ca-toronto-1-ad-1.clouds.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
答案1
我假设您想从下面的任何地方复制文件../log
。
如果名称与--include
or--exclude
模式匹配,则不会使用命令行上的其余模式(“第一个匹配胜出”)。如果*/
与模式不匹配,则永远不会递归--include
。
考虑到这些因素,在匹配with之前先匹配*.md
and */
with :--include
*
--exclude
rsync --archive --update --verbose --include='*.md' --include='*/' --exclude='*' ../log .
如果您希望避免创建空目录,请添加-m
或。--prune-empty-dirs
答案2
选项从左到右应用,因此您需要先包含项目,然后再排除其余项目
rsync -av --include '*.md' --include '*/' --exclude '*' --prune-empty-dirs src/ dst/
在这里,我们包括您想要的文件,包括子目录(这样我们就可以深入其中寻找匹配项),但排除其他所有内容。最终会变成空的目录也会被跳过。