2013-01-07 105 views
0

我有一臺通過sftp接收數據文件的Linux服務器。這些文件包含立即導入到應用程序以供使用的數據。文件發送到的目錄由另一個進程持續讀取,以查找要處理的新文件。sftp文件時代:讀取從sftp傳輸的尚未完成的文件

我遇到的問題是文件在完全傳輸之前正在讀取。有沒有辦法在文件傳輸之前隱藏文件?

我想到的一點是利用.filepart概念,許多sftp客戶端在完成之前使用它來重命名文件。雖然我沒有控制客戶端,那麼在服務器端有沒有辦法做到這一點?

或者還有另一種方式通過權限或類似的方式來做到這一點?

+0

看這裏http://serverfault.com/questions/282897/openssh-sftp-server-filepart-support – Satish

+0

類不同的問題的,我真的不遵循的解決方案是如何工作的。在sftp服務器上沒有設置來處理這個問題嗎? – springcorn

+0

* NO *據我所知,sftp中沒有這樣的選項。 – Satish

回答

2

我們創建這些文件會從客戶端讀取相同的文件系統上的目錄解決了類似的問題,中使用inotifywait。

您轉到暫存目錄並讓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 
+0

這看起來很不錯,謝謝。你碰巧有一個示例腳本? – springcorn

+0

像這樣的東西應該可以做到這一點。未經測試!見上面編輯過的帖子。 – tink

+0

謝謝。因此,在這種情況下,inotifywait如何知道永遠在看目錄?因爲基本上我們來看看這些文件不休 – springcorn