linux - sftp 文件年龄 : reading files transferred from sftp that aren't complete yet

标签 linux sftp

我有一个通过 sftp 接收数据文件的 linux 服务器。这些文件包含可立即导入应用程序以供使用的数据。文件发送到的目录不断地被另一个寻找要处理的新文件的进程读取。

我遇到的问题是文件在完全传输之前就被读取了。有没有办法在文件传输之前隐藏文件?

我的一个想法是利用许多 sftp 客户端用来在文件完成之前重命名文件的 .filepart 概念。虽然我无法控制客户端,但有没有办法在服务器端执行此操作?

或者是否有其他方法可以通过权限之类的方式做到这一点?

最佳答案

我们通过在客户端读取文件的同一文件系统上创建目录并使用 inotifywait 解决了类似的问题。

您 sftp 到暂存目录并让 inotifywait 监视该暂存目录。

一旦 inotify 看到任何接收到的文件的“FILE_CLOSE”事件,您只需将文件“mv”到客户端读取的目录。

#!/bin/bash
inotifywait -m -e close --format "%f\n" /path/to/tmp | while read newfile
do
  mv /path/to/tmp/"$newfile" ~/real
done

关于linux - sftp 文件年龄 : reading files transferred from sftp that aren't complete yet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202065/

相关文章:

linux - 如何在 bash 中使用全局数组?

linux - 在 fedora 27 中安装 gcc 和 g++ 版本 < 6

java - 通过 Java 的 SFTP 连接要求奇怪的身份验证

java - 在我的 Java SFTP 类中,为什么会收到此 java.net.ConnectException?

console - Ranger 文件管理器 - 访问远程服务器?

linux - 安装Eclipse时出错

python - Tar 无法通过 cronjob 工作

windows - Windows 上的 JSCH 使用 mksnt 工具包无法识别目录路径

ssh - SFTP,SSH和SSH隧道

linux - bash: [: 1+1: 预期的整数表达式