我想包含所有顶级文件 ( file1.txt
, file2
) 以及仅/top/dir1/
.我怎样才能实现它?
我已经尝试过以下方法,但它们不起作用
$ tree
.
└── from
├── file1.txt
├── file2
└── top
├── dir1
│ └── file3.txt
└── dir2
└── file4.txt
一次尝试,缺少顶级文件
$ rsync --dry-run \
> --include='top/' \
> --include='top/dir1/' \
> --include='top/dir1/***' \
> --exclude='top/*' \
> --exclude="*" \
> -av from/* .
building file list ... done
top/
top/dir1/
top/dir1/file3.txt
其他尝试包含顶级文件,但不排除 dir2
$ rsync --dry-run \
> --include="*" \
> --include='top/' \
> --include='top/dir1/' \
> --include='top/dir1/***' \
> --exclude='top/*' \
> --exclude="*" \
> -av from/* .
building file list ... done
file1.txt
file2
top/
top/dir1/
top/dir1/file3.txt
top/dir2/
top/dir2/file4.txt
答案1
切勿*
在 rsync 的源路径中使用,rsync 完全能够自行查找这些条目。
通过这样做,您可以有效地将 rsync 称为
rsync --dry-run \
--include="*" \
--include='top/' \
--include='top/dir1/' \
--include='top/dir1/***' \
--exclude='top/*' \
--exclude="*" \
-av from/file1.txt from/file2 from/top .
包含和排除模式是相对于源根的;所以--include 'top/'
等模式永远不会匹配。
做这个:
rsync --dry-run \
--include="/*" \
--include='/top/' \
--include='/top/dir1/' \
--include='/top/dir1/***' \
--exclude='/top/*' \
--exclude="*" \
-av from/ .