我有一个如下所示的文件树:
in
├── file1
├── dir1
└── dir2
├── dir3
│ ├──── file2
│ └──── junk1
├── junk2
└── junk3
我想创建一个in
如下所示的兄弟:
out
├── file1
├── dir1
└── dir2
└─── dir3
└── file2
换句话说,递归复制in
到out
排除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.