🧸rsync 按照列表同步
2023-8-8
| 2024-2-12
0  |  0 分钟
type
status
date
Aug 8, 2023 09:25 AM
slug
summary
tags
category
icon
password
引言:
 
 

遇到的问题

想把 mac linux 的配置定时同步

问题现象说明

解决过程

1. rsync 相对路径同步特定文件列表内文件
  1. 再加入 GitHub 定时自动 push
  1. crontab 定时执行

    总结

    遗留问题&思考

     
     

    遇到的问题-如何 rsync 同步相对路径

     
    rsync -rlptDvzhP --files-from=/Users/naf/linux-backup-list.txt ~ ~/CONFIG/linux-home/
     
     

    问题现象说明

    解决过程

    总结

    遗留问题&思考

    怎么增量同步合适.
    这个 –files-from 参数改变了 rsync 的默认行为,所以在比对文件时它会重复同步。为避免每次执行都重复拷贝,需要加一个 –size-only 参数,即只比对大小。
    rsync 按列表进行同步 - 墨天轮

     

    遇到的问题

    注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。
    当排除文件或目录时,需要使用它们到源目录的相对路径。
    有两个选项可以指定要排除的文件和目录:
    在命令行中,使用–exclude选项。 在文件中,使用–exclude-from选项。
     
    下面的命令与上面的命令完全相同:
    rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/ 在 exclude-file.txt 内存储这些内容:
     
    一种选择是使用以下命令:
    rsync -a -m --include='.jpg' --include='/' --exclude='*' src_directory/ dst_directory/ 使用多个include/exclude 选项时,将应用第一个匹配规则。参数含义:
    • -include='.jpg'首先,我们包括所有.jpg文件。
    • --include='/'然后,我们将所有目录都包含在in src_directory目录中。 没有这个rsync只会复制*.jpg顶级目录中的文件。
    • -m 删除空目录
     
     
    源目录结尾带 /,会将此目录下文件&目录拷贝到目标目录下,如果没有目标目录,会自动创建
     
    源目录结尾不带 /,会将此目录整个目录拷贝到目标目录下,如果没有目标目录,会自动创建

    问题现象说明

    find 搭配 rsync 用
    find 的使用:
     

    解决过程

    find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_director
     
    `find src_directory/ -name "*.jpg" -printf %P\\0\\n` 解释
     
    这个find命令用于在指定目录(这里是src_directory/)及其所有子目录中搜索所有扩展名为.jpg的文件,并使用特定的格式打印出这些文件的路径。命令的各个部分具体含义如下:
    • find:这是Unix和类Unix操作系统(如Linux和macOS)中的一个命令行工具,用于在目录树中查找文件,并对找到的文件执行指定的操作。
    • src_directory/:这是find命令的起始搜索目录。命令将在这个目录及其所有子目录中查找匹配的文件。你应该将src_directory/替换为你实际想要搜索的目录路径。
    • name "*.jpg":这个选项告诉find命令只查找文件名以.jpg结尾的文件。引号用于防止shell对通配符进行扩展,确保find命令而不是shell解释.jpg
    • printf %P\\\\0\\\\n:这是find命令的一个非常有用的选项,用于格式化输出结果。
      • %P:打印文件路径,相对于find命令中指定的起始目录。这意味着输出的路径不会包含find命令中指定的起始搜索目录部分。
      • \\\\0:打印一个null字符(ASCII码为0的字符),通常用于文件名的终止。在处理文件名包含特殊字符(如空格)时非常有用,因为null字符可以被许多命令行工具和脚本语言作为安全的记录分隔符。
      • \\\\n:打印一个换行符,确保每个找到的文件名都在新的一行上显示。
    综上所述,这个find命令会在src_directory/目录及其子目录下查找所有.jpg文件,并以相对于src_directory/的路径打印它们的文件名,每个文件名后跟随一个null字符和一个换行符。这种输出格式特别适合于需要精确处理文件名(包括那些含有空格和特殊字符的文件名)的后续命令或脚本处理。

    总结

    遗留问题&思考

     

    日志

    在使用rsync进行文件同步时,您可以通过指定--log-file选项来输出日志文件,从而记录rsync操作的详细信息。这对于监控备份状态、诊断问题或仅仅记录文件传输活动非常有用。

    命令格式

    参数解释

    • a(或-archive):这个选项表示以归档模式运行rsync,它保留了符号链接、设备、属性、权限、所有权等信息。
    • v(或-verbose):提高rsync的输出详细度,有助于了解同步过程中发生了什么。
    • z(或-compress):在传输过程中压缩数据,有助于提高远程同步的速度。
    • -log-file=/path/to/logfile.txt:指定日志文件的路径。rsync会将操作细节记录到这个文件中,而不是标准输出。替换/path/to/logfile.txt为您希望日志文件存储的实际路径和文件名。

    示例

    假设您想要同步本地目录/home/user/data/到远程服务器remotehost:/backup/user/data/,并且希望将操作日志保存到本地文件/home/user/rsync.log中,可以使用如下命令:

    注意事项

    • 确保您有权限写入指定的日志文件路径。
    • 根据您的需求,rsync还提供了其他选项来调整同步行为,如-exclude用于排除不需要同步的文件或目录。
    • 如果您在脚本中使用rsync命令,确保正确处理可能出现的任何错误,例如通过检查rsync的退出状态。
    使用--log-file选项可以帮助您更好地监控和审计rsync操作,使文件同步过程更加透明和可控。
     
    rsync本身不直接提供限制日志文件大小的选项。如果您需要管理日志文件的大小,可以考虑使用外部工具或脚本来实现日志轮转(log rotation),这样可以保持日志文件在一定大小范围内。常见的做法是使用logrotate,这是一个在Linux系统上广泛使用的日志管理工具,可以根据配置文件中指定的规则来自动轮转、压缩、删除和邮寄日志文件。

    使用logrotate管理rsync日志文件

    1. 创建logrotate配置文件:首先,您需要为rsync日志创建一个logrotate配置。例如,创建一个名为/etc/logrotate.d/rsync的文件,其中包含如下内容:
      1. 配置解释
          • /path/to/rsync.log:指定rsync日志文件的路径。
          • rotate 4:保留最近的4个日志文件。
          • weekly:每周轮转一次日志文件。
          • compress:轮转时压缩旧日志文件(使用gzip)。
          • missingok:如果日志文件不存在,不会报错。
          • notifempty:如果日志文件为空,不进行轮转。
          • create 640 username groupname:轮转后创建新的日志文件,设置权限和所有者。
      1. 运行logrotatelogrotate通常由cron定期执行,但您也可以手动运行以测试配置:
        确保将/path/to/rsync.log替换为您的实际rsync日志文件路径,以及usernamegroupname替换为合适的用户和组。
        通过使用logrotate,您可以有效地管理rsync日志文件的大小和数量,避免单个日志文件变得过大,同时也可以通过压缩和删除旧日志来节省磁盘空间。这是一种灵活且强大的方式来处理rsync或任何其他应用程序的日志文件。
         

        成品1 :把 pve, oracle-test 资料备份到NAS

        PVE 上删除了, NAS 也同步删除.
        但 NAS上开启了回收站,放置误删.
        rsync -rlptDvzhP --files-from=/volume1/vps/rsync_backup_list_pve.txt pve-local:/ /volume1/vps/pve/ --log-file=/volume1/vps/rsync_backup_list_pve.log
        rsync -rlptDvzhP --files-from=/volume1/vps/rsync_backup_list_oracle_test.txt oracle-test:/ /volume1/vps/oracel_test/ --log-file=/volume1/vps/rsync_backup_list_oracle_test.log
         
        技术折腾
      2. 工具
      3. Linux
      4. win server 搭建 linux 环境MongoDB 使用总结
        目录