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