2013-10-14 41 views
0

我目前有一個bash腳本來查看一個文件並將一些數據存儲爲一個變量......我只希望發生這種情況,如果文件是沒有被更新。Bash:如何檢查一個文件是否仍在使用

我想使用類似的:

touch "/path/tofile/temp.txt" 
while [[ test "/path/tofile/temp.txt" -nt "/path/tofile/readme.txt" ]] 
do 
echo "readme is still updating" 
else? move on??? 
+0

也許有用:http://askubuntu.com/q/14252/143251 – fedorqui

+2

你試過'lsof'嗎? – devnull

+1

不明確的問題。你真的想檢查文件_currently_是否被_being_更新?這是不可能的,因爲沒有正式的這種_state_。你所能做的只是查看其他進程是否在文件上有一個打開的文件句柄(使用'lsof'或類似的工具)。但是,您的方法會比較文件時間提示,因爲您希望執行其他操作,例如查找自某個特定時間以來文件是否已更改。是這樣嗎? – Alfe

回答

1

這種通常的方法是將文件寫入一個臨時名稱,並將其重命名爲「官方」的名字時,它已經準備好通過其他使用流程。這樣,你可以避免一堆問題。即使這看起來很多工作,你應該真的考慮這一點。

或者,您可以使用鎖定文件夾:讓更新過程和您的腳本在磁盤上創建一個文件夾。只要該文件夾存在,另一個進程正在處理該文件,以便當前進程需要等待。缺點:偶爾會發生錯誤,並且鎖定文件夾將停留在周圍,並且會導致死鎖。

或者您可以使用lsof來查看是否有一個進程打開這個文件來寫入文件...但這並不意味着當您開始讀取文件時,這個信息仍然是真實的。

再說一遍:使用臨時名稱並在文件準備好時重命名文件。真。有時候其他一切都可能有效這真的是你想告訴你的老闆嗎?

相關問題