2014-01-16 59 views
0

我有一個每兩小時運行一次的腳本。它將Helix數據庫集合及其日誌文件複製到本地備份文件夾。我首先保存,所以它們同步,然後複製它們。它已經開始間歇性地失敗,說日誌文件正在使用中。它在Finder中變暗。AppleScript複製後使用的文件

這裏的腳本:

tell application "Finder" 
    set dupArray to {} 
    --move the collection into the array 
    set CollectionName to name of collectionFile 
    copy collectionFile to the end of dupArray 

    --move the logfile into the array 
    set theCollectionLogfile to ((mainLoc as text) & "Log_" & CollectionName & ".hlog") 
    if (exists file theCollectionLogfile) then 
     copy theCollectionLogfile to the end of dupArray 
    end if 

    --do the duplicate 
    duplicate dupArray to backupFolder with replacing 
end tell 

我怎樣才能得到它與該更換第二次複製?

感謝

萊尼

回答

0

注: 我建議你保存你的工作和試驗大力所以你得到了這些概念。 請完整閱讀。

[編輯:我意識到,即使你可能明白了我的意思,我寫了「複製」時,我的意思是寫在評論「重複」]

您可以嘗試使用類似的以下:

--right before duplicate 
set UNIQUE_fileName to "Log_" & CollectionName & ".hlog" 
repeat until fileNotInUse 
    try 
     do shell script "lsof | grep " & UNIQUE_fileName 
    on error 
     set fileNotInUse to true 
     exit repeat 
    end try 
end repeat 
--do duplicate 

這應該等到文件完成寫入。您會注意到我正在使用UNIQUE,因爲如果有任何其他文件與系統使用的該名稱匹配,或者其他任何文件都會使您陷入無限循環。避免這種情況的一種方法是傳遞文件的POSIX樣式完整路徑而不是名稱。通過設置重複的上限,您也可以特別小心。下面是使用這兩種思路的一個版本:

--right before duplicate 

set upperLimit to 200000 
set u to 0 

set theCollectionLogfilePOSIX to quoted form of (POSIX path of theCollectionLogfile) 
repeat until fileNotInUse 
    try 
     do shell script "lsof | grep " & theCollectionLogfilePOSIX 
    on error 
     set fileNotInUse to true 
     exit repeat 
    end try 
set u to (u + 1) 
if (u > upperLimit) then exit repeat 
end repeat 
--do duplicate 

還是那句話:

我建議你保存你的工作和試驗大力所以你得到的概念。

[編輯:這是在一個try塊,因爲如果沒有什麼「開放」(即沒有被從lsof的結果「grepped」),該做的shell腳本將錯誤]

+0

感謝回答。我昨天出去了......不幸的是,一天之後,這個文件仍然在使用中。它不會釋放任何東西 –

+0

我認爲你的意思是「複製」,我寫了「複製」;這是打算在最後一個重複部分之前。 – CRGreen

0

好了,我終於點子彈,只是寫在'做外殼腳本'。原來Finder不想扔掉這個文件,它仍然被某些東西所吸引。我用同上進行復制(因爲這些文件有資源分叉),我用rm來刪除這個文件。

我認爲Finder搞砸了,並鎖定了一些東西,因爲我正在複製的文件在我做這件事時已經打開了套接字。我還認爲Get Ifo對話框應該有一個區域,您可以在該區域中看到應用程序使用的東西,如果它顯示爲「正在使用」。

感謝您的幫助......

萊尼

相關問題