rsync 排除除特定文件之外的所有内容

rsync 排除除特定文件之外的所有内容

如何使用 排除除特定文件之外的所有文件rsync

我尝试仅使用 , 备份特定文件rsync,以排除所有文件,但某些特定文件(即文件)除外.md,并且所有这些页面中的解决方案对我不起作用:

$ 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

如果名称与--includeor--exclude模式匹配,则不会使用命令行上的其余模式(“第一个匹配胜出”)。如果*/与模式不匹配,则永远不会递归--include

考虑到这些因素,在匹配with之前先匹配*.mdand */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/

在这里,我们包括您想要的文件,包括子目录(这样我们就可以深入其中寻找匹配项),但排除其他所有内容。最终会变成空的目录也会被跳过。

相关内容