我在服务器 1 上有这样的目录结构:
- 数据
- 公司1
- unique_folder1
- 其他文件夹
- ...
- 公司2
- unique_folder1
- ...
- ...
- 公司1
我想在服务器 2 上复制这个文件夹结构,但只复制 unique_folder1 的目录/子目录。 IE。结果必须是:
- 数据
- 公司1
- unique_folder1
- 公司2
- unique_folder1
- ...
- 公司1
我知道 rsync
对此非常有用。
我试过“包含/排除”选项但没有成功。
例如我试过:
rsync -avzn --list-only --include '*/unique_folder1/**' --exclude '*' -e ssh user@server.com:/path/to/old/data/ /path/to/new/data/
但是,结果是,我没有看到任何文件/目录:
receiving file list ... done
sent 43 bytes received 21 bytes 42.67 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
怎么了?想法?
附加信息:
我对两台服务器都有 sudo 访问权限。我有一个想法 - 是同时使用 find
命令和 cpio
将我需要的内容复制到新目录,然后使用 Rsync
。但是这样很慢,还有很多文件等等。
最佳答案
我找到了原因。至于我 - 不清楚 Rsync
以这种方式工作。
所以正确的命令(仅适用于 company1
目录)必须是:
rsync -avzn --list-only --include 'company1/' --include 'company1/unique_folder1/***' --exclude '*' -e ssh user@server.com:/path/to/old/data/ /path/to/new/data
即我们需要包含每个父 company
目录。当然我们不能在命令行中手动编写所有这些 company
目录,所以我们将列表保存到文件中并使用它。
我们需要做的最后一件事:
1.在服务器 1 上生成包含文件,因此其内容为(我使用了 ls
和 awk
):
+ company1/
+ company1/unique_folder1/***
...
+ companyN/
+ companyN/unique_folder1/***
2.复制include.txt到服务器2,使用如下命令:
rsync -avzn \
--list-only \
--include-from '/path/to/new/include.txt' \
--exclude '*' \
-e ssh user@server.com:/path/to/old/data/ \
/path/to/new/data
关于centos - 如何使用rsync只复制特定的子目录(几个目录同名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687755/