使用 sftp get 仅获取最近 30 分钟内修改的文件

使用 sftp get 仅获取最近 30 分钟内修改的文件

.sh脚本中,我使用expect自动sftp到另一台计算机来存储get文件。我的脚本将设置为每 30 分钟运行一次,此时我想要get 仅有的自上次运行以来创建(修改)的文件(在过去 30 分钟内有重复风险)。我知道这些文件将遵循特定的命名方法:AppData*.RAW其中*将是日期和时间字符串。但是,我不知道这些文件何时会被创建或传输到我正在通信的计算机上,也不知道可能有多少个,因为数量会有所不同。

...
/usr/bin/expect<<EOD
spawn sftp user@host
expect "User's password: "
send "$password\r"
expect "sftp>"
send "get ????"
EOD
...

我搜索了有关get使用该开关的帮助并找到了参考-neweronly,并尝试了synchronize。但是,我不知道如何实现其中任何一个,或者甚至不知道对话 synchronize中是否有一个选项。sftp帮助get

此外,我的计算机必须sftp将传入的文件存储在包含数千个旧文件(从 2013 年至今)的目录中,因此我必须只获取最近半小时的文件。

答案1

sftp能力有限。通过 SFTP 执行复杂操作的最简单方法是使用SSHFS。 SSHFS 是一种使用 SFTP 使远程文件系统显示为本地文件系统的文件系统。在客户端,SSHFS 需要保险丝,在大多数现代 unice 上都可用。在服务器上,SSHFS需要SFTP;如果服务器允许 SFTP,那么您可以使用 SSHFS。

例如,要复制过去 30 分钟内修改的文件,请首先使用 .sftp 通过 SFTP 挂载远程目录sshfs。使用sshpass如果您必须使用 SSH 密码。然后使用您在本地使用的命令(在这里,我使用 GNU 实用程序,但根据您正在执行的操作,rsync -a mnt/ /local/path/可能会更好)。完成后卸载 SSHFS 文件系统。

mkdir mnt
sshpass -f password.txt sshfs user@host: mnt
find mnt -mmin -30 -exec cp -t /local/path/ {} +
fusermount -u mnt

相关内容