如何用rsync同步指定目录下所有子目录的.gz文件并保留目录结构
解决rsync同步指定子目录.gz文件的问题
问题原因分析
你之前尝试的两个命令都存在逻辑问题:
- 第一个命令的过滤规则
+ */*/*/*/*/*.gz硬编码了固定层级的目录路径,一旦目录结构变动就会失效,更关键的是rsync需要先获得目录的访问权限,否则根本无法深入子目录查找文件 - 第二个命令只允许
*.gz文件,但默认会拒绝所有未被明确允许的目录,导致rsync连子目录都不会进入,自然找不到目标文件
正确执行命令
使用以下命令即可实现需求,同时完整保留原目录结构:
rsync -avP -n -f "+ */" -f "+ *.gz" -f "- *" root@tt:/source/ /dest/
注意:源路径末尾的
/必须加上,它表示同步/source目录下的内容,而非将/source目录本身同步到/dest中
规则详细说明
-f "+ */":允许遍历所有子目录,这是rsync能找到深层.gz文件的前提-f "+ *.gz":匹配所有.gz格式的文件,允许同步这些目标文件-f "- *":排除所有未被前面两条规则允许的文件和目录-n:模拟运行模式,仅输出匹配结果不会实际同步文件,确认结果符合预期后可移除该参数执行真实同步-avP:-a启用归档模式(保留文件权限、修改时间等属性),-v显示同步详细日志,-P显示传输进度并支持断点续传
验证步骤
执行带-n的命令后,若输出中能看到目标.gz文件的路径,说明规则匹配正确,此时去掉-n重新执行即可完成同步。
内容的提问来源于stack exchange,提问作者nothingisme
相关产品推荐
相关产品推荐

