0

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

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

我的一个想法是利用许多 sftp 客户端用来在文件完成之前重命名文件的 .filepart 概念。我无法控制客户端,那么有没有办法在服务器端做到这一点?

还是有其他方法可以通过权限或其他方式来做到这一点?

4

1 回答 1

2

我们已经解决了类似的问题,方法是在客户端读取文件的同一文件系统上创建一个目录,并使用 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
于 2013-01-07T20:07:42.310 回答