type
status
date
Aug 8, 2023 09:25 AM
slug
summary
tags
category
icon
password
引言:
遇到的问题问题现象说明解决过程总结遗留问题&思考遇到的问题-如何 rsync 同步相对路径问题现象说明解决过程总结遗留问题&思考遇到的问题问题现象说明解决过程总结遗留问题&思考日志命令格式参数解释示例注意事项使用logrotate管理rsync日志文件成品1 :把 pve, oracle-test 资料备份到NAS
遇到的问题
想把 mac linux 的配置定时同步
问题现象说明
解决过程
1. rsync 相对路径同步特定文件列表内文件
- 再加入 GitHub 定时自动 push
- crontab 定时执行
总结
遗留问题&思考
遇到的问题-如何 rsync 同步相对路径
rsync -rlptDvzhP --files-from=/Users/naf/linux-backup-list.txt ~ ~/CONFIG/linux-home/
问题现象说明
解决过程
总结
遗留问题&思考
怎么增量同步合适.
rsync 按列表进行同步 - 墨天轮这个 –files-from 参数改变了 rsync 的默认行为,所以在比对文件时它会重复同步。为避免每次执行都重复拷贝,需要加一个 –size-only 参数,即只比对大小。
遇到的问题
注意:--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日志文件
- 创建logrotate配置文件:首先,您需要为
rsync
日志创建一个logrotate
配置。例如,创建一个名为/etc/logrotate.d/rsync
的文件,其中包含如下内容:
- 配置解释:
/path/to/rsync.log
:指定rsync
日志文件的路径。rotate 4
:保留最近的4个日志文件。weekly
:每周轮转一次日志文件。compress
:轮转时压缩旧日志文件(使用gzip)。missingok
:如果日志文件不存在,不会报错。notifempty
:如果日志文件为空,不进行轮转。create 640 username groupname
:轮转后创建新的日志文件,设置权限和所有者。
- 运行logrotate:
logrotate
通常由cron定期执行,但您也可以手动运行以测试配置:
确保将
/path/to/rsync.log
替换为您的实际rsync
日志文件路径,以及username
和groupname
替换为合适的用户和组。通过使用
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