我必须每分钟轮询一次远程服务器,如果文件从上次修改了,就复制文件。我不能使用“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
,因此您显然可以使用 ssh
。 ssh
将要在远程主机上执行的命令作为其参数。因此,您可以通过 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/