使用for loop结合rsync仅同步指定文件夹的问题排查
问题分析与解决
你的命令核心问题是rsync的参数顺序和源路径写法错误:
- 当前命令
rsync -ah $var source/ target/中,你把$var和source/同时作为rsync的源路径,这会导致rsync每次都把整个source/目录同步到target/,完全忽略了$var的作用(甚至如果$var不是有效路径,rsync还会报错但依然同步source/)。 - 正确的逻辑应该是:以
source/下的目标子文件夹作为源,也就是把$var和source/拼接成完整的源路径。
修正后的命令
for var in $(cat final.txt); do rsync -ah "source/$var" "target/"; done
额外注意事项
- 用双引号包裹
"source/$var"和"target/",避免子文件夹名包含空格、特殊字符时出现解析错误。 - 如果
final.txt里的每行是相对source目录的子文件夹路径(比如sub1/sub2这种嵌套路径),上面的写法依然有效,rsync会自动在target目录下创建对应的层级结构。 - 若需要让target下的对应子文件夹与source完全同步(删除target中source没有的文件),可添加
--delete选项,但需谨慎使用该参数。
内容的提问来源于stack exchange,提问作者Unixcited
相关产品推荐
相关产品推荐

