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

标签 linux ubuntu centos rsync

我有两个文件夹 FolderAFolderB,如下所示。我想 rsync 公共(public)子文件夹。例如,我可以执行 rsync -avzP/path/to/FolderB/*/path/to/FolderA/,这将保留 SubFolder1SubFolder3镜像。我的问题是,如果 FolderB 是没有明确 --include--exclude 单个子文件夹(例如,在以防它们太多了)。

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

FolderB
|--SubFolder1
|--SubFolder3

最佳答案

您可以使用 contents FolderB 作为源更新 FolderA 中的所有文件:

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

(注意 FolderB/ 后的尾随 '/' 必须复制内容 FolderB 而不是 FolderB 本身)

反向执行并从 FolderA 更新 FolderB 而不是复制 SubFolder2SubFolder4--existing 选项将“跳过在接收器上创建新文件”但这也会阻止 SubFolder1< 中的新文件和目录SubFolder3 也被创建。

您最好选择不复制 SubFolder2SubFolder4,同时允许在 SubFolder1SubFolder3 中创建新文件和目录创建是使用 --filter 选项。参见 rsync(1) - Linux manual page .

使用 --filter 排除 SubFolder2SubFolder4FolderAFolderB 将是:

rsync -uav --filter -_SubFolder2/ --filter -_SubFolder4/ /path/to/FolderA/ /path/to/FolderB

这将允许您将 /path/to/FolderA/ 的完整内容复制到 /path/to/FolderB/,而不包括 SubFolder2SubFolder4


编辑大量子文件夹的每条评论

如果您不想在 FolderB 下同步 FolderA 下的大量文件夹,那么您的另一个选择是创建一个包含 FolderA 的文本文件em>绝对路径 仅指向 FolderA 下的那些 SubFolderX 您想要 rsyncFolderB 然后使用 --no-R--files-from=folderlist 选项仅rsync 想要的子文件夹。这将消除在命令行上指定大量 --filter 选项的麻烦。

例如,您可以创建文件夹列表:

find /path/to/FolderA -maxdepth 1 -type d > folderlist

(注意:在上面指定绝对路径,find 将生成包含绝对路径的folderlist 文件)

现在编辑您的 folderlist 文件并删除父目录(例如 /path/to/FolderA)和您不想在 下同步的任何子文件夹文件夹B。您现在可以使用 folderlist 文件来控制将 FolderA 下的哪些子文件夹同步到 FolderB,而无需在上包含一长串过滤器命令行。然后你的命令行变成

rsync -uai -r --no-R --files-from=folderlist / /path/to/FolderB

(注意作为'/'用作文件夹列表中包含的路径的基础. 您可以更改 -i 选项来控制转储到屏幕的信息级别,例如 -v 等...或完全删除它以抑制任何报告其他比错误)

(另请注意:当使用--files-from时,-a并不意味着-r (递归),因此如果需要递归传输,则需要显式添加-r)

关于linux - 如何同步目标文件夹中存在的所有文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57263543/

相关文章:

linux - 如何使用 sed 在 ubuntu 中的文件末尾添加多个换行符

linux - Autosys 盒子问题

c - 什么会导致 sock send() 命令出现 “Resource temporarily unavailable”

java - 无法将 Spring Boot 应用程序启动到 Linux 服务器

python - 如何解决 Gdk-CRITICAL ** : 17:13:03. 280:gdk_cursor_new_for_display:断言 'GDK_IS_DISPLAY (display)' 失败

linux - 如何将 docker registry default 从 docker.io 更改为 centos 中的另一个地址

kubernetes - KubeDNS 没有 kubernetes.default 到主机的路由

php - APC缓存碎片问题

linux - 在 ubuntu 20.04 中安装虚幻引擎需要多少时间和总磁盘空间?

linux - 使用 HERE 运行嵌套命令行