You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rsync shell expansion同步时,如何保留指定子目录结构?

解决rsync结合globstar同步时的目录结构问题

当你用globstar(**)配合rsync同步大量文件时,虽然速度快,但默认会把所有my_folder下的文件平铺到目标目录;直接加-R(--relative)又会带上完整的前置路径,导致目录嵌套过深。可以通过以下两种方法解决:

方法1:切换工作目录后使用-R

先进入targetvolume/targetdir目录,这样globstar展开的路径是从该目录开始的相对路径,再用-R保留结构:

cd targetvolume/targetdir && rsync -ahvR ./**/my_folder/ ../../outputdir

执行后,outputdir下会生成a/my_folder/file1.txt、b/my_folder/file2.txt等符合预期的结构。

方法2:使用--cut-dirs截断前置路径

无需切换目录,直接用--cut-dirs参数去掉不需要的前置层级(这里需要截断targetvolume和targetdir两级):

rsync -ahvR --cut-dirs=2 targetvolume/targetdir/**/my_folder/ ./outputdir

--cut-dirs=2会将源路径中的前两级目录(targetvolume/和targetdir/)移除,只保留后续的a/my_folder/、b/my_folder/等结构同步到目标目录。

原理说明

  • 原命令中,globstar展开后rsync将每个my_folder/作为独立源,默认仅复制目录内的文件,不保留上层路径。
  • -R参数会让rsync保留从当前工作目录到源文件的完整相对路径,配合--cut-dirs可以精准截断不需要的前置目录层级,同时保留你需要的结构。
  • 这两种方法都延续了globstar的速度优势,适合处理数万文件的场景。

内容的提问来源于stack exchange,提问作者seh33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:02:15