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

文章目录

  • 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.mzph.cn/diannao/66849.shtml

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

相关文章

AIOps 平台

AIOps(Artificial Intelligence for IT Operations)平台是一种结合人工智能(AI)技术和IT运营管理的解决方案,旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章: 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令(重要)3.3cp指令(重要)输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令(重要)mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

Vue3初学之Element-plus

用于快速的上手开发,以做项目为导向,所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的,还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…

vue2新增删除

&#xff08;只是页面实现&#xff0c;不涉及数据库&#xff09; list组件&#xff1a; <button click"onAdd">新增</button><el-table:header-cell-style"{ textAlign: center }" :cell-style"{ textAlign: center }":data&quo…

实用操作系统学习笔记

第1章 操作系统概述 操作系统基本概念 【基础知识】 操作系统&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的…

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker&#xff0c;注册到nameserver上是自己的pod ip&#xff0c;导致本机连接到的broker的pod ip&#xff0c;这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…

【机器学习:八、逻辑回归】

逻辑回归&#xff08;Logistic Regression&#xff09; 1. 逻辑回归的引出 在现实世界中&#xff0c;许多问题都涉及到分类任务。例如&#xff1a; 判断一封邮件是否为垃圾邮件&#xff1b;预测某人是否会患某种疾病&#xff1b;确定图片中是否包含某种特定物体。 这些问题…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…

【2024年华为OD机试】 (A卷,100分)- 总最快检测效率(Java JS PythonC/C++)

一、问题描述 题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为 N 人/小时。由于外界变化&#xff0c;采样员的效率会以 M 人/小时为粒度发生变化&#xff0c;M 为采样效率浮动粒度&#xf…

如何使用MVC模式设计和实现校园自助点餐系统的微信小程序

随着智慧校园的普及&#xff0c;校园自助点餐系统在提高学生用餐效率、减轻食堂运营压力方面发挥了重要作用。 在开发这类系统时&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;模式是一种非常适合的架构&#xff0c;它将系统的业务逻辑、用户界面和数据交互清晰…

离线录制激光雷达数据进行建图

目前有一个2D激光雷达&#xff0c;自己控制小车运行一段时间&#xff0c;离线获取到激光雷达数据后运行如下代码进行离线建图。 roslaunch cartographer_ros demo_revo_lds.launch bag_filename:/home/firefly/AutoCar/data/rplidar_s2/2025-01-08-02-08-33.bag实际效果如下 d…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

Zookeeper 集群安装

Zookeeper 集群 主机 IP SoftWare Port OS Myidnode1 192.168.230.128 apache-zookeeper-3.7.1 2181 Centos 7 1 node2 192.168.230.129 apache-zookeeper-3.7.1

腾讯云AI代码助手编程挑战赛——贪吃蛇小游戏

作品介绍 贪吃蛇小游戏需要控制蛇的移动方向&#xff0c;使其吃掉地图上随机出现的食物&#xff0c;每吃掉一个食物&#xff0c;蛇的身体就会增长一格&#xff0c;是一款老少皆宜的小游戏&#xff0c;我们可以用腾讯ai助手生成全部代码&#xff0c;简单方便快捷。 技术架构 …

三角学基本公式和定理

一、基本关系式 正弦、余弦、正切的定义&#xff1a; sin ⁡ α 对边 斜边 \sin\alpha \frac{对边}{斜边} sinα斜边对边​ cos ⁡ α 邻边 斜边 \cos\alpha \frac{邻边}{斜边} cosα斜边邻边​ tan ⁡ α 对边 邻边 \tan\alpha \frac{对边}{邻边} tanα邻边对边​ 同角…

USB-OTG中的HNP和SRP协议与ID引脚的硬件支持关系详解

在USB On-The-Go&#xff08;OTG&#xff09;架构中&#xff0c;HNP&#xff08;Host Negotiation Protocol&#xff0c;主机协商协议&#xff09;和SRP&#xff08;Session Request Protocol&#xff0c;会话请求协议&#xff09;是实现设备动态切换主机与从设备角色的关键协议…

QT跨平台应用程序开发框架(1)—— 环境搭建

目录 一&#xff0c;关于QT 二&#xff0c;关于应用程序框架 三&#xff0c;环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四&#xff0c;Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一&#xff0c;关于QT 互联网…

Nginx | 解决 Spring Boot 与 Nginx 中的 “413 Request Entity Too Large“ 错误

关注&#xff1a;CodingTechWork 引言 在 Web 开发中&#xff0c;413 Request Entity Too Large 是一种常见的 HTTP 错误&#xff0c;它指示客户端请求的实体&#xff08;例如文件或数据&#xff09;超出了服务器允许的最大大小。对于使用 Spring Boot 和 Nginx 的应用程序来说…