使用rsync命令实现xsync广播脚本

1.rsync

1.1介绍

rsync 是一个非常强大的文件同步工具,它用于在本地计算机之间或通过网络在不同计算机之间高效地复制文件和目录。rsync 支持增量复制,这意味着它只会传输自上次同步以来发生变化的部分数据,从而显著减少网络带宽的使用。
基本语法
rsync 的基本语法如下:

rsync [options] source destination
  • source: 源文件或目录。
  • destination: 目标文件或目录。

常用选项

  • -a, --archive: 归档模式,等同于 -rlptgoD,即递归复制文件、保持符号链接、权限、时间戳、所有权等。
  • -r, --recursive: 递归复制整个目录。
  • -v, --verbose: 显示详细信息。
  • -z, --compress: 对数据进行压缩传输。
  • -P: 等同于 -rp 和 --partial,即递归复制并允许部分传输。
  • -e, --rsh=COMMAND: 指定远程 shell 命令,默认为 ssh。
  • -h, --human-readable: 以人类可读的方式显示文件大小。
  • -u, --update: 只传输那些源文件比目标文件新或者目标文件不存在的文件。
  • -c, --checksum: 使用校验和来检测文件是否改变,而不是依赖于文件大小和最后修改时间。 通过 SSH 复制文件

假设你想从本地计算机复制文件到远程服务器,可以使用以下命令:

rsync -avz -e ssh /path/to/local/file user@remote_host:/path/to/remote/directory/

这里:

  • -avz: 使用归档模式、详细输出和压缩传输。
  • -e ssh: 使用 SSH 协议进行数据传输。
  • /path/to/local/file: 本地文件路径。
  • user@remote_host:/path/to/remote/directory/: 远程服务器上的目标路径。

从远程服务器复制文件
要从远程服务器复制文件到本地计算机,可以使用以下命令:

rsync -avz -e ssh user@remote_host:/path/to/remote/file  /path/to/local/directory/

递归复制整个目录
要递归复制整个目录及其子目录,可以使用 -r 或 -a 选项:

rsync -avz -e ssh /path/to/local/directory/ user@remote_host:/path/to/remote/directory/

注意事项
确保你有足够的权限访问源和目标位置。
在复制大量数据时,考虑使用 -z 选项以减少网络流量。
使用 -v 选项可以帮助你了解 rsync 的执行进度。
如果远程服务器需要密码认证,确保你正确配置了 expect 脚本来处理密码提示。

1.2安装方式

sudo apt update
sudo apt install rsync -y

2.xsync实现

使用 rsync 与 expect 结合实现
expect实现自动输入密码

#!/bin/bash
#判断参数的个数
if [ $# -lt 1 ]
then
    echo Not Enough Arhuement!
    exit;
fi

#遍历集群所有机器
for host in hadoop002 hadoop003 hadoop004
do
    echo ========== ${host} ==========
    #遍历所有目录,挨个发送
    for file in $@
    do
        #判断文件是否存在
        if [ -e $file ]
        then
            #cd -P cd软连接进入的仍然是目标目录
            pdir=$(cd -P $(dirname $file); pwd)
            #获取文件名称
            fname=$(basename $file)
            # 标准的开启expect的脚本执行开始
/usr/bin/expect <<EOF
            set timeout 30
            spawn ssh root@${host} "mkdir -p $pdir"
            expect {
               "yes/no"
               {
                 send "yes\r";
                 exp_continue
               }
               "password:"
               {
                  send "12345678\r"
               }
            }

            puts "${host}自动登录成功"
            spawn rsync -av $pdir/$fname root@${host}:$pdir
            expect {
               "yes/no"
               {
                 send "yes\r"
                 exp_continue
               }
               "password:"
               {
                  send "12345678\r"
               }
            }
            expect eof
EOF
        else
            echo $file does not exists!
        fi
    done
done

hadoop002 hadoop003 hadoop004是要广播的远程服务器
$(dirname $file) 获取所在文件的目录
$(basename $file) 获取文件名称

效果图
在这里插入图片描述

注意:

ssh root@${host} "mkdir -p $pdir" 

ssh root@${host} “mkdir -p $pdir”,登录成功后会自动执行mkdir -p p d i r ,最后自动退出远程服务器, s s h r o o t @ pdir,最后自动退出远程服务器,ssh root@ pdir,最后自动退出远程服务器,sshroot@{host} 并不会自动退出而是停留再远程服务端交互界面。
因此使用ssh root@${host} “mkdir -p $pdir” 不用再执行send “exit \r”。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity 穿山甲是指在 Unity 引擎中接入穿山甲广告SDK的过程。穿山甲广告SDK是一种用于在应用程序中展示广告的工具。根据引用,您可以在给定的博客文章中找到 Unity 接入穿山甲广告SDK的示例源代码。同时,引用提供了穿山甲官方网站上的SDK下载链接。 然而,您提到在导入穿山甲SDK后,在打包APK时遇到了一个错误。根据引用,这个错误可能是因为您的mainTemplate.gradle文件使用了旧版的aaptOptions noCompress属性定义,而未包括unityStreamingAssets常量定义的类型。为了解决这个错误,您可以尝试更新mainTemplate.gradle文件中的aaptOptions noCompress属性定义,以包括unityStreamingAssets常量定义的类型。这样可以确保在打包APK时正确处理Unity Streaming Assets。 总结起来,Unity 穿山甲是指在 Unity 引擎中接入穿山甲广告SDK的过程。您可以通过引用中的示例源代码和引用中的官方SDK下载链接来完成接入。同时,如果在导入SDK后遇到错误,您可以参考引用中提供的解决方案来处理该错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [unity接入穿山甲广告SDK示例Demo源码 V4.1.0.2](https://download.csdn.net/download/gaoliang0/71924016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Unity接入穿山甲广告SDK(以及GroMoreDemo)](https://blog.csdn.net/gaoliang0/article/details/121544454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [unity穿山甲SDK打包问题](https://blog.csdn.net/qinooo/article/details/120504478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不穿铠甲的穿山甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值