rsync - 包括顶级文件并排除目录

rsync - 包括顶级文件并排除目录

我想包含所有顶级文件 ( 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/ .

相关内容