2014-02-24 25 views
1

我有一個腳本來檢查傳輸文件在運行之前,但即使我知道傳輸文件的事實,它也會運行。看起來'cmp'操作無法正常工作。我需要確保在完成傳輸之前我不抓取任何文件。代碼如下:使用cmp檢查傳輸文件不能正常工作

different=1 
compare1=~/Desktop/$$-testing1.txt 
compare2=~/Desktop/$$-testing2.txt 
waittime=10s 
DATE=$(date +%Y%m%d) 
PRO="/Volumes/pubfiles/ConversionRequests/Processed" 
DATEI=$(date +-%m-%d-%Y) 

cd $PRO/Processed$DATEI 
echo Checking if files are in process in ${PWD}... 
while [ $different -eq 1 ]; do 
ls [email protected] 1> $compare1 
sleep $waittime 
ls [email protected] 1> $compare2 

if cmp $compare1 $compare2 ; then 
    echo Files have not changed in $waittime. Continuing... 
    different=0 
else 
    echo Files are still being transferred. Waiting $waittime... 
fi 
done 

rm $compare1 
rm $compare2 

回答

0

變化:

ls -la 

到:

du -sk 

看來這個問題是ls -la只會列出目錄本,而不是他們各自的大小以字節爲單位,因此CMP文件將永遠是相同。通過使用:

du -sk 

你得到的目錄的大小和while循環將繼續它應該。

3

您的方法可能無法正常工作。爲了確保你沒有讀取某個其他進程當前正在編寫的文件,請使用臨時名稱來編寫該文件。完成後,讓它重命名該文件。

然後您可以簡單地忽略臨時文件名稱。

如果您使用自制腳本來傳輸文件,請使用適當的傳輸工具(如rsync(1))替換該文件。

如果您使用的是商業產品,請提交缺陷。如果他們拒絕修復它,那麼他們可能不知道他們在做什麼 - 找到更好的產品。