通过 Bash 检查 SFTP 上过去 30 分钟内文件是否发生变化

通过 Bash 检查 SFTP 上过去 30 分钟内文件是否发生变化

我需要查看文件在过去 30 分钟内是否发生了变化,如果没有变化,则退出脚本。

sftp 服务器上会有一个包含许多文件的目录,但我只需要检查是否有一个文件在 30 分钟内发生变化。此检查的代码如下。

该脚本将每分钟左右作为 cronjob 运行一次。

我有一个简单的 if 语句来查看文件是否发生变化,但无法在 sftp 服务器上运行它。

if [ $(find ./ -type f -mmin 30) ]

我的ubuntu版本是20.04,无法在sftp上运行ssh。

有什么办法吗,这样我可以直接在 sftp 上运行 if 语句?

答案1

if您不能直接运行或find通过这样的表达式sftp。您需要使用sftp命令并从他们的输出中自己解析信息或使用python pysftp自己进行编程。

但是,您可以挂载服务器并在挂载的目录中本地sftp运行:find

# Install sshfs on your localcomputer if needed
sudo apt install sshfs

# Mount the directory
mkdir sftpmnt
sudo sshfs -o allow_other -p 60022 user@server:/ sftpmnt/

# List all files changed within the last 30 minutes
find sftpmnt -mmin -30 -printf '%T+\t%p\n'

# Or check if any file changed within the last 30 minutes and do_something
if find sftpmnt -mmin -30 -print -quit | grep -q "." ; then
   echo "Found new or modified file(s)"
   do_something
fi

相关内容