我有一个通过 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