远程和本地文件的互相同步

文章目录

  • 1、rsync实现类似git push pull功能
    • 1. 基础概念
    • 2. 示例操作
    • 3. 定制化和进阶用法
    • 4. 定时同步(类似自动化)
  • 2 命令简化
    • 1. 动态传参的脚本
    • 2. Shell 函数支持动态路径
    • 3. 结合环境变量和参数(更简洁)
    • 4. Makefile 支持动态路径

使用场景,远程有一台无法连接互联网的服务器,性能强大;本地有一台性能差的电脑,但可以上网。那么要合并这两台电脑的功能,取其强,那么做为程序员,就是在本地编辑,再同步到远程,然后在远程执行。
rsync 是一个高效的文件同步工具,但它不像 Git 那样具有版本控制功能。你可以通过 rsync 在本地和远程主机之间同步文件,实现类似 Git 的 pushpull 操作。那么将使用rsync实现这个功能

1、rsync实现类似git push pull功能

以下是如何用 rsync 实现类似 Git 的 pushpull 操作:


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 密钥认证:

  1. 生成 SSH 密钥:
    ssh-keygen -t rsa
    
  2. 将公钥复制到远程主机:
    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 的增量同步和中断恢复机制在网络不稳定时非常有用。

这套流程可以很好地模拟 pushpull 的功能,但如果需要更复杂的版本管理功能,建议直接使用 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 函数,它们最适合经常使用和路径灵活的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505514.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络-ping包分析

-a:使 ping 在收到响应时发出声音(适用于某些操作系统)。-b:允许向广播地址发送 ping。-c count:指定发送的 ping 请求的数量。例如,ping -c 5 google.com 只发送 5 个请求。-i interval:指定两…

工厂管理中 BOM(物料清单)

工厂管理中 BOM(物料清单)的一些优点: 1. 提高生产计划准确性 - 准确反映产品所需的物料及数量,为生产计划提供可靠依据,减少因物料估算错误导致的生产延误。 2. 优化成本控制 - 有助于精确计算产品成本&…

uniapp实现在card卡片组件内为图片添加长按保存、识别二维码等功能

在原card组件的cover属性添加图片的话&#xff0c;无法在图片上面绑定 show-menu-by-longpress"true"属性&#xff0c;通过将图片自定义添加可使用该属性。 代码&#xff1a; <uni-card title"标题" padding"10px 0" :thumbnail"avata…

L1G5000 XTuner 微调个人小助手认知

使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知 1 环境配置与数据准备步骤 0. 使用 conda 先构建一个 Python-3.10 的虚拟环境步骤 1. 安装 XTuner 修改提供的数据步骤 0. 创建一个新的文件夹用于存储微调数据步骤 1. 创建修改脚本步骤 2. 执行脚本步骤 3. 查看数据…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)

替换介绍&#xff1a; 国能磐石服务器操作系统CEOS 对标 Linux 服务器操作系统&#xff08;Ubuntu, CentOS&#xff09; 东方通TongHttpServer 对标 Nginx 负载均衡Web服务器 第一步&#xff1a; 服务器安装CEOS映像文件&#xff0c;可直接安装&#xff0c;本文采用使用VMware …

人工智能与物联网:智慧城市的未来

引言 清晨6点&#xff0c;智能闹钟根据你的睡眠状态和天气情况&#xff0c;自动调整叫醒时间&#xff1b;窗帘缓缓打开&#xff0c;阳光洒满房间&#xff1b;厨房里的咖啡机已经为你准备好热饮&#xff0c;而无人驾驶公交车正按时抵达楼下站点。这不是科幻电影的场景&#xff…

基于 Python 自动化接口测试(踩坑与实践)

文档&#xff1a;基于 Python 的自动化接口测试 目录 背景问题描述与解决思路核心代码修改点及其详细解释最终测试结果后续优化建议 1. 问题背景 本项目旨在使用 Python 模拟浏览器的请求行为&#xff0c;测试文章分页接口的可用性。测试目标接口如下&#xff1a; bashcoder…

【LeetCode】力扣刷题热题100道(21-25题)附源码 接雨水 合并区间 字母异位词 滑动窗口 覆盖子串(C++)

目录 1.接雨水 2.合井区间 3.找到字符串中所有字母异位词 4.滑动窗口最大值 5.最小覆盖子串 1.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 代码如下所示&#xff1a; class Solution {…

HTTP-响应协议

HTTP的响应过程&#xff1f; 浏览器请求数据--》web服务器过程&#xff1a;请求过程 web服务器将响应数据-》到浏览器&#xff1a;响应过程 响应数据有哪些内容&#xff1f; 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…

【Linux】模拟Shell命令行解释器

一、知识补充 1.1 snprintf snprintf() 是 C语言的一个标准库函数&#xff0c;定义在<stdio.h>头文件中。 snprintf() 函数的功能是格式化字符串&#xff0c;并将结果存储在指定的字符数组中。该函数的原型如下&#xff1a; int snprintf(char *str, size_t size, con…

AI多模态技术介绍:视觉语言模型(VLMs)指南

本文作者&#xff1a;AIGCmagic社区 刘一手 AI多模态全栈学习路线 在本文中&#xff0c;我们将探讨用于开发视觉语言模型&#xff08;Vision Language Models&#xff0c;以下简称VLMs&#xff09;的架构、评估策略和主流数据集&#xff0c;以及该领域的关键挑战和未来趋势。通…

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略&#xff0c;它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意&#xff0c;将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描&#xff0c;寻找可入侵的目标时&…

PLC实现HTTP协议JSON格式数据上报对接的参数配置说明

IGT-SER系列PLC通讯智能网关支持HTTP协议GET和POST、PUT请求模式。支持JSON格式的文件&#xff0c;也可以实现WebService的调用。 通常智能网关是HTTP协议的客户端&#xff0c;也可以同时作为HTTP的服务端。相关案例 作为客户端时支持触发、周期、混合等多种工…

设计模式-结构型-组合模式

1. 什么是组合模式&#xff1f; 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说&#xff0c;组合模式允…

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…

RK3568 Android 13 内置搜狗输入法小计

问&#xff1a;为什么写&#xff1f; 答&#xff1a;网上搜出来的都试过了&#xff0c;不行&#xff01;下面直接上代码和注意事项&#xff01; 首先到这个目录&#xff08;/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall&#xff09…

IT面试求职系列主题-人工智能(一)

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;再从人工智能基础知识来一波吧。 1&#xff09;您对人工智能的理解是什么&#xff1f; 人工智能是计算机科学技术&#xff0c;强调创造能够模仿人类行为的智能机器。这里智能机器可以定义为能够像人一样行动、像人一…

数据挖掘实训:天气数据分析与机器学习模型构建

随着气候变化对各行各业的影响日益加剧&#xff0c;精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键&#xff0c;例如农业、交通和灾害预警等领域。本文将通过机器学习方法&#xff0c;利用历史天气数据预测明天是否会下雨&#xff0c;具体内容包括数据预处理、…