linux - 通过每分钟轮询从远程目录复制修改后的文件

标签 linux bash sftp scp

我必须每分钟轮询一次远程服务器,如果文件从上次修改了,就复制文件。我不能使用“rsync”。所以我遵循的方法是每分钟轮询一次服务器,获取临时目录中的文件,如果修改了,则将其复制到实际目录中。下面是相关代码。

while true
do
  scp -pq ${SFTP_USER}@${SFTP_SERVER}:${SFTP_PATH}/${FILE_NAME} ${PUT_TEMP_SFTP_PATH} 2>/dev/null
  mododTime=$(date +%s -r ${PUT_TEMP_SFTP_PATH}/${FILE_NAME})
  if [[ "${mododTime}" -gt "${lastModTime}" ]]
  then
    cp -p ${PUT_TEMP_SFTP_PATH}/${FILE_NAME} ${PUT_ACTUAL_SFTP_PATH}/${FILE_NAME}
    lastModTime=$mododTime
    echo "Copying modified file"
  fi
  sleep 1
done

我需要两个方面的帮助:

1.在我的方法中,我每次都复制文件以获得修改后的时间戳。我可以在不实际复制的情况下获得该时间戳吗?

2.我想知道如何通过 ps 后跟 grep 之类的操作从外部(比如另一个 bash 脚本,即我的 kill 作业)终止脚本(我面临的一个问题是 ps 将进程名称显示为 bash ,所以我无法准确识别过程)

最佳答案

无需复制。您正在使用 scp,因此您显然可以使用 sshssh 将要在远程主机上执行的命令作为其参数。因此,您可以通过 ssh 简单地stat 远程计算机上的文件,并与本地的 mod 时间 进行比较,例如

if [ $(ssh host "stat -c %Y /path/to/remote/file") -gt $(stat -c %Y /localfile) ]
then
    scp "your remote file"
fi

如果您已经建立到远程主机的公钥/私钥无密码登录,这会有所帮助。如果没有,可以使用许多方法。

关于linux - 通过每分钟轮询从远程目录复制修改后的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49769451/

相关文章:

带有私钥身份验证的 SFTP 的 cURL

c - 调度自己的进程 C/linux

linux -/usr/bin/cut : Argument list too long in bash script

string - 如何使用 Bash 将多个空格替换为单个空格?

sftp - 如何验证是否已在服务器上授予 SFTP 访问权限

c# - SSH.NET 库对文件名进行编码

python - 从 bash 执行 python 脚本后没有得到提示

linux - 使用 xargs 将变量传递给别名命令

linux - 在特定列之间插入竖线作为分隔符

regex - sed 替换星号