【Linux专栏】rsync实验-同步指定日期前的文件

Oracle && OceanBase 相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


1.背景

近期由于备份盘空间不够了,需要将文件切一个时间点,指定时间点之前的放在旧盘,指定时间点之后的文件放在新盘。

本文针对上述情况,实验验证。

2. 实验

2.1 准备

1)文件夹及文件准备

只有4个文件是2025年的,其中3个文件是2025-05-15, 有1个文件是 2025-05-19

本实验:抽取>=2025-05-15的文件 到指定目录,且带着文件夹。

2)相关知识

rsync,remote synchronizetion,具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能。rsync还可在本地主机的不同分区或目录之间全量及增量的复制数据。scp每次都是全量拷贝,而rsync可以增量拷贝。
rsync 命令本身不能指定同步的时间段 ,可搭配 find 命令来同步指定时间段的文件

--include-from 或 --files-from 只同步部分目录

--exclude-from 不同步这些目录

rsync -av

最常用的选项,表递归模式,保留软链接、文件权限、修改时间戳、属主、属组、设备文件、特殊文件,详细显示执行过程

rsync -avu

不覆盖已修改的文件

rsync -av --delete

删除目的端存在,但远端不存在的内容。

rsync -av --existing

目的端不创建新内容,就是只同步目的端有的内容
#同步修改时间在3天内的文件

rsync -avz --files-from=<(find /var/log/ -mtime -3) /usr remote:/backup

#使用 newermt 可按时间精确查找,如:

find /var/log -newermt '2023-3-18 20:00:00' ! -newermt '2023-3-18 22:00:00'
搜索:

#!/bin/bash

设置时间点

TIME_POINT="2023-03-01"

使用find命令查找所有在指定时间点之后修改的文件

FILES=(find /source -type f -newermt "TIME_POINT")

使用rsync同步这些文件

rsync -av --files-from=<(echo "$FILES") /source/ /destination/
/usr/local/rsync/bin/rsync -azv --include "aa/" --include "bb/" --include "ee" --exclude "/*" --progress rsync://127.0.0.1/site /work/backup/htdocs_bak/site

说明:

--include "aa/" --include "bb/" --include "ee" 包含了你要同步的目录 --exclude包含了不同步的目录所有用"/*"指定。

--exclude "/*" 除了--include同步的目录外,排除其他目录
使用rsync -aP --exclude=upload 只能排除upload文件/目录。
如果要排除多个文件/目录:建一个exclude.list,里面要排除的目录(一行一个文件/目录),然后rsync -aP --exclude-from="exclude.list"

rsync -aP --exclude-from=/root/exclude.list 192.168.113.118:/web_bak/www/ /www/

(从118同步数据到本机)
补充:

rsync -vau --files-from="/root/syncto.txt" --exclude-from="/root/excludefile.txt" /data/web/ root@192.168.11.12:/data/web/

用这种方式,syncto.txt 写入要同步的文件,execludefile.txt 存不需要同步的文件

2.2 实验

1)实验:找到2025-05-15之后的文件

复制代码
cd /home/data
find ./555011029/ -type f -newermt '2025-05-15'|wc -l

截图: 是4个文件 没有问题

2)实验:将符合条件的文件抽取到文件中

复制代码
cd /home/data/555011029
find  ./  -type f -newermt '2025-05-15' >/home/data/2025after.txt

截图:

3)实验:rsync 抽取

将抽取到的文件,同步到新建的文件夹 /home/data/test/2025after/ 下,需要带层级。

复制代码
mkdir -p /home/data/test/2025after/

rsync -va --files-from="/home/data/2025after.txt" /home/data/555011029 /home/data/test/2025after

截图:

4)验证

复制代码
cd /home/data/test/2025after/

tree

具体查看文件的时间:也没有变化 ok

2.3 脚本验证

1)命令行执行

复制代码
cd /home/data/test/
rm -rf 2025after/
mkdir 2025after

vim rsync_2025after.sh
bash 复制代码
#!/bin/bash
time_point="2025-05-15"

cd  /home/data/
FILES=$(find 555011029 -type f -newermt "$time_point")

echo "$FILES">/home/data/test/2025after.txt
echo "$FILES"

rsync -av --files-from=<(echo "$FILES") ./  /home/data/test/2025after/

截图:

2)脚本执行报错分析

这里发现奇怪的问题,单独执行可以,放在脚本中就不行了 ??

提示:rsync: failed to open files-from file <(echo 555011029/2025_old/05/nh-fms/49eb8f8f-c02e-4c0c-a7cc-87b67dc3594b.pdf\#012555011029/2025_old/05/nh-fms/8922038c-cbe2-4b46-a962-959c1a576404.pdf\#012555011029/2025_old/05

rsync error: syntax or usage error (code 1) at main.c(1575) [client=3.1.2]

oracle@appx-container data\]$ 根据错误信息,`rsync` 在尝试读取文件列表时遇到了语法或使用错误 避免路径中#,如果路径中必须包含 `#`,可使用 `--protect-args` 选项:防止 `#` 被误认为注释符 看到上面报错中,换行符显示为 \\`#012` `printf` 不会自动转义换行符,加上 `--protect-args 貌似也不行` ![](https://i-blog.csdnimg.cn/direct/fb4c4fb1c89a42b38a30ae24e0865d8f.png)

3)修改脚本

<(echo "$FILES") 改为 "/home/data/test/2025after.txt"

ok,执行成功

4)排除文件实验

bash 复制代码
vim /home/data/test/exclude.txt
555011029/2025_old/05/nh-fms/948ad48f-2fe2-4497-9c86-a8edea4d7a1f.pdf


vim /home/data/test/rsync_2025after.sh
#!/bin/bash
time_point="2025-05-15"

cd  /home/data/
FILES=$(find 555011029 -type f -newermt "$time_point")

echo "$FILES">/home/data/test/2025after.txt
echo "$FILES"

#rsync -av --files-from=<(echo "$FILES") ./  /home/data/test/2025after/
#rsync -av --protect-args --files-from=<(echo "$FILES") ./  /home/data/test/2025after/
#上面有点ude-from="/root/excludefile.txt"

rsync -av  --files-from="/home/data/test/2025after.txt" --exclude-from="/home/data/test/exclude.txt" ./  /home/data/test/2025after/

截图:ok 排除成功。

3.总结

FILES=(find 555011029 -type f -newermt "time_point")

#找某个时间之后修改的文件

rsync -va --files-from="/home/data/2025after.txt" --exclude-from="/root/excludefile.txt" /home/data/555011029 /home/data/test/2025after

只同步指定文件中的内容,且保持文件目录位置、修改时间不变

通过命令结合,找到想要同步的文件

实验验证:ok


项目管理--相关知识

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

相关推荐
呆子罗2 小时前
[解决方案]企业级ASP.NET CORE项目部署方案 IIS NGINX Win/Linux
linux·nginx·asp.net
艾莉丝努力练剑2 小时前
【Linux基础开发工具 (六)】Linux中的第一个系统程序——进度条Linux:详解回车、换行与缓冲区
java·linux·运维·服务器·c++·centos
liliangcsdn2 小时前
conda环境jupyter-lab GLIBCXX_3.4.29问题探索
linux·conda
草莓熊Lotso2 小时前
哈希表的两种灵魂:深入探索开放定址与链地址法的核心机密
linux·运维·数据结构·c++·人工智能·算法·哈希算法
赖small强2 小时前
【Linux C/C++开发】Linux C/C++编译参数 `-fPIC` 深度解析
linux·c语言·c++
雪碧聊技术2 小时前
linux服务器的java项目如何重新部署(之前已经部署过的情况)?
linux·nohup·java项目重新部署·杀掉进程
漏洞文库-Web安全2 小时前
渗透测试中的方法论
linux·运维·学习·安全·web安全·网络安全·逆向
素雪风华2 小时前
永久关闭Ubuntu 终端 Tab /vim自动补全时的蜂鸣声
linux·服务器·ubuntu
jiayong232 小时前
Linux ps 命令深度解析与实战技巧
linux·运维·服务器