使用 rsync 递归复制目录,同时排除子目录,但包括排除子目录的子目录中的文件

使用 rsync 递归复制目录,同时排除子目录,但包括排除子目录的子目录中的文件

我有一个如下所示的文件树:

in
├── file1
├── dir1
└── dir2
    ├── dir3
    │   ├──── file2
    │   └──── junk1
    ├── junk2
    └── junk3

我想创建一个in如下所示的兄弟:

out
├── file1
├── dir1
└── dir2
    └─── dir3
         └── file2

换句话说,递归复制inout排除in/dir2但包括in/dir2/dir3/file2

我尝试了以下方法:

rsync -a --exclude='in/dir2' --include='in/dir2/dir3/file2' in out

结果如下:

out
└── in
    └── file1

因此我尝试了以下方法:

rsync -a --exclude='dir2' --include='dir2/dir3/file2' in/ out

其结果是:

out
└── file1

我怎样才能使用rsync或其他 unix 工具实现我想要的功能?我宁愿避免使用诸如管道tar之类的奇怪方法tar...

答案1

那么,如何将其拆分为多个 rsync 命令并将它们捆绑到 shell 脚本中呢?

另一种可能的替代方法是将 find 与 cpio 结合到目标设备。

答案2

您可以使用 rsync 探索--exclude-from=FILE--include-from=FILE选项。

--include-from=FILE
        This  option is related to the --include option, but it specifies a FILE that contains include patterns
        (one per line).  Blank lines in the file and lines starting with ’;’ or ’#’ are ignored.  If FILE is -,
        the list will be read from standard input.

相关内容