You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Rsync文本文件筛选目录异常及指定目录不含子目录同步方法咨询

关于rsync备份问题的解答

一、使用include列表文件同步时出错的常见原因

我先帮你排查下用--include-from指定列表同步时可能踩的坑,这些都是我自己和身边运维朋友经常犯的错误:

  • 参数顺序搞反了:rsync的规则是按从上到下匹配的,如果你先写--exclude='*'再加载include列表,所有内容会先被排除,后面的include规则根本不会生效!正确的顺序应该是先加载需要保留的列表,再排除所有其他内容,示例命令结构如下:

    rsync -avz --include-from=/home/rsync_list/test.txt --exclude='*' user@remote:/source/path/ /local/dest/
    
  • 列表文件里的路径格式不对:列表中的路径是相对于源目录的相对路径,比如你的源是user@remote:/raid0/opmdps/,那列表里应该写TEMP_folder/而非绝对路径/raid0/opmdps/TEMP_folder/。另外,如果要同步文件夹及其内容,规则要覆盖文件夹本身和内部文件,比如列表里需要写两行:

    TEMP_folder/
    TEMP_folder/**
    

    第一行匹配文件夹本身,第二行匹配文件夹下的所有内容(需要递归同步时用);如果只需要一级文件,就写TEMP_folder/TEMP_folder/*

  • 列表文件格式细节问题:每行只能写一个规则,不要加多余空格,注释要以#开头,也别用Windows换行符(Linux环境下),这些小细节很容易导致规则失效。

  • 遗漏递归参数:如果要同步文件夹内的内容,一定要加-r或者-a-a包含递归、权限保留等核心参数),不然rsync只会同步空文件夹本身,不会拉取里面的文件。

二、仅同步指定文件夹且不含子目录的命令

如果只想同步/raid0/opmdps/TEMP_folder/下的一级文件/文件夹(不同步子目录内容),有两种简单可靠的写法:

方法1:禁用递归(最直接)

rsync默认不递归,若用了包含递归的-a参数,只需加上--no-recursive即可:

# 同步远程主机TEMP_folder下的一级内容到本地目标
rsync -av --no-recursive user@remote:/raid0/opmdps/TEMP_folder/ /local/backup/dest/

注意源路径末尾的/:带/表示同步文件夹内部的内容,不带则会把TEMP_folder文件夹本身同步到目标目录下。

方法2:用exclude规则排除子目录

如果需要保留-r带来的权限/属性同步能力,可以通过排除所有子目录实现:

rsync -av --include='*' --exclude='*/' user@remote:/raid0/opmdps/TEMP_folder/ /local/backup/dest/

这个命令的逻辑是:包含所有一级文件/文件夹,但排除所有子目录(*/匹配所有子目录),从而只同步目标文件夹的一级内容。

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

火山引擎 最新活动