自动化同步外网文件至内网

下面是一个我的示例脚本。在运行脚本之前,请确保已经安装了所需的软件和工具,并且已经配置了正确的权限和认证信息。

#!/bin/bash

set -e

filename="$1"

# 设置远程机器的地址、用户名和密码
remote_host="your_username@your_remote_ip"
password="your_password"
lockfile="$filename.lock"

# 获取当前日期和时间,并格式化为年月日时分秒
current_time=$(date +"%Y%m%d%H%M%S")

# 创建以当前日期和时间命名的zip文件
zip_file_name="$filename.${current_time}.zip"

# 检查远程服务器上是否存在.lock文件,如果存在则直接退出
if ssh your_username@your_remote_ip '[ -f /path/to/lockfile/$lockfile ]'; then
    echo "$lockfile file exists on remote server. Exiting..."
    exit 0
else
    echo "$lockfile not exists"
fi

# 在远程服务器上检查文件是否存在,如果存在则创建.lock文件
ssh your_username@your_remote_ip "[ -f /path/to/remote/directory/$filename.zip ] && touch /path/to/lockfile/$lockfile"

# 拷贝文件到本地
scp your_username@your_remote_ip:/path/to/remote/directory/$filename.zip /path/to/local/directory/$zip_file_name

# 拷贝文件到远程机器
/opt/homebrew/bin/sshpass -p "$password" scp /path/to/local/directory/$zip_file_name "$remote_host:/path/to/remote/directory/$zip_file_name"

echo ">>>>>>>>>>>>>>>>>> File '$zip_file_name' copied to remote machine successfully."

# 清理远程服务器上的文件和锁文件
ssh your_username@your_remote_ip "rm /path/to/remote/directory/$filename.zip /path/to/lockfile/$lockfile"

需要替换脚本中的以下信息:

  • your_username: 远程服务器的用户名。
  • your_remote_ip: 远程服务器的IP地址或域名。
  • your_password: 远程服务器的密码。请注意,为了安全考虑,你可能需要使用更安全的认证方法,比如SSH密钥对。
  • /path/to/remote/directory/: 在远程服务器上文件所在的路径。
  • /path/to/local/directory/: 本地文件所在的路径。

这个脚本首先检查远程服务器上是否存在锁文件,以确保不会同时运行多个实例。

然后它检查远程服务器上是否存在要同步的文件,如果存在,则创建锁文件以防止其他实例同时操作该文件。

接下来,它将文件从远程服务器复制到本地目录,然后将文件从本地目录复制到另一个远程服务器。

最后,它清理远程服务器上的文件和锁文件。


Xcode 15.3 新增的一个编译选项 "User Response File" Mac 设置全局快捷键打开任意程序