远程和本地文件的互相同步
文章目录
- 1、rsync实现类似git push pull功能
- 1. 基础概念
- 2. 示例操作
- 3. 定制化和进阶用法
- 4. 定时同步(类似自动化)
- 2 命令简化
- 1. 动态传参的脚本
- 2. Shell 函数支持动态路径
- 3. 结合环境变量和参数(更简洁)
- 4. Makefile 支持动态路径
使用场景,远程有一台无法连接互联网的服务器,性能强大;本地有一台性能差的电脑,但可以上网。那么要合并这两台电脑的功能,取其强,那么做为程序员,就是在本地编辑,再同步到远程,然后在远程执行。
rsync 是一个高效的文件同步工具,但它不像 Git 那样具有版本控制功能。你可以通过
rsync 在本地和远程主机之间同步文件,实现类似 Git 的
push 和
pull 操作。那么将使用rsync实现这个功能
1、rsync实现类似git push pull功能
以下是如何用 rsync 实现类似 Git 的 push 和 pull 操作:
1. 基础概念
- Push:将本地的文件同步到远程。
- Pull:将远程的文件同步到本地。
rsync 的基本语法:
rsync [选项] 源路径 目标路径
2. 示例操作
Push 操作:本地 → 远程
rsync -avz --delete /local/path/ user@remote_host:/remote/path/
/local/path/是本地目录(注意末尾的/)。user@remote_host:/remote/path/是远程主机的目标路径。- 关键选项:
-a:归档模式,保留文件权限、时间戳等。-v:显示详细信息。-z:启用压缩,提高传输效率。--delete:删除目标路径中不在源路径中的文件,保持完全同步。
Pull 操作:远程 → 本地
rsync -avz --delete user@remote_host:/remote/path/ /local/path/
- 语法类似于
push,只是把源路径和目标路径互换。
3. 定制化和进阶用法
排除某些文件或目录
使用 --exclude 选项:
rsync -avz --delete --exclude "node_modules/" --exclude "*.log" /local/path/ user@remote_host:/remote/path/
使用 SSH 密钥认证
为了避免频繁输入密码,可以设置 SSH 密钥认证:
- 生成 SSH 密钥:
ssh-keygen -t rsa - 将公钥复制到远程主机:
ssh-copy-id user@remote_host
测试同步操作
使用 --dry-run 选项模拟操作,检查同步内容:
rsync -avz --dry-run /local/path/ user@remote_host:/remote/path/
4. 定时同步(类似自动化)
可以使用 cron 或 Windows 任务计划程序实现定时同步。例如:
Linux 上的 cron 示例
编辑 cron:
crontab -e
添加如下内容,每 30 分钟同步一次:
*/30 * * * * rsync -avz --delete /local/path/ user@remote_host:/remote/path/
Windows 系统(任务计划程序)
将 rsync 命令写入 .bat 文件,并通过任务计划程序定时运行。
注意事项
- 没有版本控制:
rsync不支持历史记录,如果需要像 Git 那样的版本管理,可以结合 Git 使用。 - 同步时注意删除操作:使用
--delete时,要确保备份数据,以免误删文件。 - 网络问题:
rsync的增量同步和中断恢复机制在网络不稳定时非常有用。
这套流程可以很好地模拟 push 和 pull 的功能,但如果需要更复杂的版本管理功能,建议直接使用 Git。
2 命令简化
如果路径是动态变化的,可以设计一个更灵活的解决方案,让你在运行时传递路径参数。以下是几种方法实现这一需求:
1. 动态传参的脚本
编写一个脚本,支持在运行时指定路径:
脚本内容
创建一个名为 sync.sh 的脚本,内容如下:
#!/bin/bash# 检查参数
if [ "$#" -lt 3 ]; thenecho "Usage: $0 [push|pull] [local_path] [remote_path]"exit 1
fiACTION=$1
LOCAL_PATH=$2
REMOTE_PATH=$3
REMOTE_USER="user" # 替换为你的远程用户名
REMOTE_HOST="remote_host" # 替换为你的远程主机if [ "$ACTION" == "push" ]; thenrsync -avz --delete "$LOCAL_PATH" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
elif [ "$ACTION" == "pull" ]; thenrsync -avz --delete "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" "$LOCAL_PATH"
elseecho "Invalid action: $ACTION. Use 'push' or 'pull'."exit 1
fi
赋予执行权限
chmod +x sync.sh
使用方法
运行时传递路径:
./sync.sh push /local/path /remote/path
./sync.sh pull /local/path /remote/path
2. Shell 函数支持动态路径
在 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)中定义一个动态路径的函数:
函数定义
function sync() {if [ "$#" -lt 3 ]; thenecho "Usage: sync [push|pull] [local_path] [remote_path]"return 1filocal action=$1local local_path=$2local remote_path=$3local remote_user="user" # 替换为你的远程用户名local remote_host="remote_host" # 替换为你的远程主机if [ "$action" == "push" ]; thenrsync -avz --delete "$local_path" "$remote_user@$remote_host:$remote_path"elif [ "$action" == "pull" ]; thenrsync -avz --delete "$remote_user@$remote_host:$remote_path" "$local_path"elseecho "Invalid action: $action. Use 'push' or 'pull'."return 1fi
}
激活函数
source ~/.bashrc # 或 ~/.zshrc
使用方法
sync push /local/path /remote/path
sync pull /local/path /remote/path
3. 结合环境变量和参数(更简洁)
在脚本中结合环境变量,减少重复输入常用的用户名和主机名:
脚本内容
#!/bin/bashREMOTE_USER=${REMOTE_USER:-"user"} # 默认远程用户名
REMOTE_HOST=${REMOTE_HOST:-"remote_host"} # 默认远程主机if [ "$#" -lt 3 ]; thenecho "Usage: $0 [push|pull] [local_path] [remote_path]"exit 1
fiACTION=$1
LOCAL_PATH=$2
REMOTE_PATH=$3if [ "$ACTION" == "push" ]; thenrsync -avz --delete "$LOCAL_PATH" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
elif [ "$ACTION" == "pull" ]; thenrsync -avz --delete "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" "$LOCAL_PATH"
elseecho "Invalid action: $ACTION. Use 'push' or 'pull'."exit 1
fi
运行脚本时指定环境变量
REMOTE_USER=myuser REMOTE_HOST=myhost ./sync.sh push /local/path /remote/path
4. Makefile 支持动态路径
用 Makefile 传递路径参数:
Makefile 示例
push:rsync -avz --delete $(LOCAL_PATH) user@remote_host:$(REMOTE_PATH)pull:rsync -avz --delete user@remote_host:$(REMOTE_PATH) $(LOCAL_PATH)
使用方法
运行时指定变量:
make push LOCAL_PATH=/local/path REMOTE_PATH=/remote/path
make pull LOCAL_PATH=/local/path REMOTE_PATH=/remote/path
通过这些方式,你可以实现动态指定路径,同时保持命令简洁,推荐根据使用场景选择 脚本 或 Shell 函数,它们最适合经常使用和路径灵活的需求。
相关文章:
远程和本地文件的互相同步
文章目录 1、rsync实现类似git push pull功能1. 基础概念2. 示例操作3. 定制化和进阶用法4. 定时同步(类似自动化) 2 命令简化1. 动态传参的脚本2. Shell 函数支持动态路径3. 结合环境变量和参数(更简洁)4. Makefile 支持动态路径…...
自然语言处理之jieba分词和TF-IDF分析
jieba分词和TF-IDF分析 目录 jieba分词和TF-IDF分析1 jieba1.1 简介1.2 终端下载1.3 基本语法 2 TF-IDF分析2.1 什么是语料库2.2 TF2.3 IDF2.4 TF-IDF2.5 函数导入2.6 方法 3 实际测试3.1 问题解析3.2 代码测试 1 jieba 1.1 简介 结巴分词(Jieba)是一个…...
探索式测试
探索式测试是一种软件测试风格,它强调独立测试人员的个人自由和职责,为了持续优化其工作的价值,将测试学习、测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目实现过程中并行地执行。 选择合适的探索式测试方法我…...
服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例
服务器数据恢复环境&故障: 一台服务器上的8块硬盘组建了一组raid5磁盘阵列。上层安装windows server操作系统,部署了oracle数据库。 raid5阵列中有2块硬盘的硬盘指示灯显示异常报警。服务器操作系统无法启动,ORACLE数据库也无法启动。 服…...
ISP各模块功能介绍
--------声明,本文为转载整理------- ISP各个模块功能介绍: 各模块前后效果对比: 黑电平补偿(BLC) 在理想情况下,没有光照射的像素点其响应值应为0。但是,由于杂质、受热等其它原因的影响&…...
Python 数据建模完整流程指南
在数据科学和机器学习中,建模是一个至关重要的过程。通过有效的数据建模,我们能够从原始数据中提取有用的洞察,并为预测或分类任务提供支持。在本篇博客中,我们将通过 Python 展示数据建模的完整流程,包括数据准备、建…...
深入学习RocketMQ
参考:RocketMQ从从入门到精通_rocketmq入门到精通-CSDN博客 1、消息的类型 普通消息 顺序消息 延时消息 批量消息 事务消息 2、在java中使用 2.1、pom.xml中加入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId…...
国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档
1 扩展脚本:关闭所有未修改文档 1.1 应用场景 当用户打开过多文档时,部分文档已经修改,而大部分没有修改,为了减少在众多已打开文档中来回跳转的不便,可以将没有修改的文档全部关闭,但目前提供的快速关闭窗…...
数据结构二叉树-C语言
数据结构二叉树-C语言 1.树1.1树的概念与结构1.2树的相关术语1.3树的表示1.4树形结构实际运用场景 2.二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构 3.实现顺序结构的二叉树4.实现链式结构二叉树4.1前中后序遍…...
Python基于YOLOv8和OpenCV实现车道线和车辆检测
使用YOLOv8(You Only Look Once)和OpenCV实现车道线和车辆检测,目标是创建一个可以检测道路上的车道并识别车辆的系统,并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…...
代码随想录算法训练营第六十天|KM94.城市间货物运输Ⅰ|KM95.城市间货物运输Ⅱ|KM96.城市间货物运输Ⅲ
94. 城市间货物运输 I 2、Bellman_ford队列优化算法(又名SPFA) SPFA是对Bellman_ford算法的优化,由于Bellman_ford 算法 每次都是对所有边进行松弛,其实是多做了一些无用功。其实只需要对 上一次松弛的时候更新过的节点作为出发节…...
人工智能学习路线全链路解析
一、基础准备阶段(预计 2-3 个月) (一)数学知识巩固与深化 线性代数(约 1 个月): 矩阵基础:回顾矩阵的定义、表示方法、矩阵的基本运算(加法、减法、乘法)&…...
C++语言的学习路线
C语言的学习路线 C是一种强大的高级编程语言,广泛应用于系统软件、游戏开发、嵌入式系统和高性能应用等多个领域。由于其丰富的功能和灵活性,C是一门值得深入学习的语言。本文旨在为初学者制定一条系统的学习路线,帮助他们循序渐进地掌握C语…...
用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(3) —— 基于 LangChain 框架的文档检索与问答功能以及RAG Tool的使用
介绍基于 LangChain 框架的文档检索与问答功能,目标是通过查询存储的向量数据库(VectorDB),为用户的问题检索相关内容,并生成自然语言的答案。以下是代码逻辑的详细解析: 代码结构与功能 初始化环境与加载…...
20250110doker学习记录
1.本机创建tts环境。用conda. 0.1安装。我都用的默认,你也可以。我安装过一次,如果修复,后面加 -u bash Anaconda3-2024.10-1-Linux-x86_64.sh等待一会。 (base) ktkt4028:~/Downloads$ conda -V conda 24.9.2学习资源 Conda 常用命令大…...
MPU6050: 卡尔曼滤波, 低通滤波
对于MPU6050(一种集成了三轴加速度计和三轴陀螺仪的惯性测量单元),对加速度值进行卡尔曼滤波,而对角速度进行低通滤波的选择是基于这两种传感器数据的不同特性和应用需求。以下是详细解释: 加速度值与卡尔曼滤波 为什么使用卡尔曼滤波? 噪声抑制: 加速度计信号通常包含…...
C++的标准和C++的编译版本
C的标准和C的编译版本:原理和概念 理解 C标准 和 C编译版本 的关系是学习 C 的一个重要部分。这两者虽然看似相关,但实际上分别涉及了不同的概念和技术。下面将通过层次清晰的解释,帮助新手理解这两个概念的差异、特点及其相互关系。 一、C标…...
python学习笔记—17—数据容器之字符串
1. 字符串 (1) 字符串能通过下标索引来获取其中的元素 (2) 旧字符串无法修改特定下标的元素 (3) index——查找字符串中任意元素在整个字符串中的起始位置(单个字符或字符串都可以) tmp_str "supercarrydoinb" tmp_position1 tmp_str.index("s") tmp_p…...
UE5 使用内置组件进行网格切割
UE引擎非常强大,直接内置了网格切割功能并封装为蓝图节点,这项功能在UE4中就存在,并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型,需要配置一些参数。以UE5…...
51单片机——串口通信(重点)
1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
