我有一个通过sftp接收数据文件的linux服务器。这些文件包含立即导入应用程序以供使用的数据。发送文件的目录由另一个进程查找要处理的新文件。
我遇到的问题是文件在完全传输之前就已经被读取了。有没有办法在文件传输之前隐藏文件?
我有一个想法是利用.filepart概念,许多sftp客户端在完成之前用来重命名文件。我没有控制客户端,所以有没有办法在服务器端执行此操作?
或者是否有另外一种方法可以通过权限或其他方式来执行此操作?
答案 0 :(得分: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