如何同步目标文件夹中存在的所有文件夹

时间:2019-07-30 02:26:23

标签: linux ubuntu centos rsync

我有两个文件夹FolderAFolderB,如下所示。我想rsync公用子文件夹。例如,我可以做rsync -avzP /path/to/FolderB/* /path/to/FolderA/,这将使SubFolder1SubFolder3保持镜像。我的问题是,如果FolderB是目的地,而没有明确的--include--exclude个单独的子文件夹(例如,如果它们太多的话),我将如何实现相同的目标。

FolderA
|--SubFolder1
|--SubFolder2
|--SubFolder3
|--SubFolder4

FolderB
|--SubFolder1
|--SubFolder3

1 个答案:

答案 0 :(得分:0)

您可以使用 内容 {strong> FolderA作为常规的源来更新FolderB中的所有文件:

rsync -uav /path/to/FolderB/ /path/to/FolderA

注意:在'/'之后的结尾FolderB/是复制{{1的 内容 }},而不是FolderB本身

要反向执行此操作,并从FolderB更新FolderB,不要使用FolderA选项复制SubFolder2SubFolder4--existing但是这也会阻止"skip creating new files on receiver"SubFolder1中创建新文件和目录。

在允许创建SubFolder3SubFolder2中的新文件和目录的同时,不复制SubFolder4SubFolder1的最佳选择是使用SubFolder3选项。参见rsync(1) - Linux manual page

在从--filter--filter的副本上使用SubFolder2排除SubFolder4FolderA的典型方法是:

FolderB

这将使您可以将rsync -uav --filter -_SubFolder2/ --filter -_SubFolder4/ /path/to/FolderA/ /path/to/FolderB 的完整内容复制到/path/to/FolderA/,而无需包含/path/to/FolderB/SubFolder2


在大量子文件夹上按评论编辑

如果您不想在SubFolder4下进行同步,而在FolderA下有大量文件夹,那么另一种选择是创建一个包含绝对路径的文本文件仅将您要FolderBSubFolderX的{​​{1}}下的FolderA,然后将rsyncFolderB选项仅用于{{ 1}}所需的子文件夹。这样就不必在命令行上指定大量的--no-R选项。

例如,您可以使用以下方法创建文件夹列表:

--files-from=folderlist

注意:在上方指定绝对路径,rsync将产生包含绝对路径的--filter文件)

现在编辑您的find /path/to/FolderA -maxdepth 1 -type d > folderlist 文件并删除父目录(例如find)以及您不想在folderlist下同步的所有子文件夹。现在,您可以使用folderlist文件来控制将/path/to/FolderA下的哪些子文件夹同步到FolderB,而不必在命令行中包含一长串过滤器。您的命令行将变为

folderlist

注意FolderA作为 source 作为FolderB中包含的路径的基础。您可以更改{{1 }}选项来控制转储到屏幕上的信息的级别,例如rsync -uai -r --no-R --files-from=folderlist / /path/to/FolderB 等...或将其全部删除以禁止显示除错误以外的任何报告)

也请注意::在使用'/'时,folderlist并不意味着-i(递归),因此您需要显式添加{{1} }(如果您需要递归传输)

相关问题