2013-03-18 25 views
2

我正在寫一個bash shell腳本,我想只要一個文件存在實現休眠序列。現在,在最簡單的情況下,這是一樣的東西:現在如何檢查文件使用通配符實存在while循環shell腳本

while [ -f fileName ] 
do 
echo "waiting" 
sleep 1 
done 

,在我的處境的第一個問題是:我想在文件名中使用通配符。這可以通過類似這樣解決:

fileName="$path/$prefix*$suffix" 
while [ -f $fileName ] 
    do 
    echo "waiting" 
    sleep 1 
done 

然而,這個如果有多個文件匹配文件名

./testWait.sh: line 11: [: /home/nrc11/egsnrc/BEAM_TB_jaws/130318110457_s.lock: binary operator expected 

我怎麼解決這個故障?

這裏是(半)具體的例子:

#!/bin/bash -u 

timeStamp="130318110457" 
echo "prefix of files: $timeStamp" 

beamDir=$(awk '{ print $0 }' $timeStamp/$timeStamp.beamDir) 
file="$EGS_HOME$beamDir/$timeStamp*.lock" 

echo $file 

while [ -f $file ] 
do 
    echo "waiting" 
    sleep 1 
done 
+0

應該怎麼測試?是否所有文件都存在?任何存在?還有別的嗎? – 2013-03-18 11:05:17

回答

1

您可以使用grep在擴大通配符來驗證它的時間戳後返回的東西比星號的其他人:

while echo $file | grep "^$EGS_HOME$beamDir/$timeStamp"'[^*]' ; do 
    echo "Waiting..." 
    sleep 1 
done 
+0

沒有考慮用grep可言,但似乎工作得很好。感謝 – user2181884 2013-03-18 11:50:11

-1

我非常用戶這一點,我想這樣做長了,我用了一些東西叫inotify的,在linux下一個包,嘗試一下,它實際上使您的生活更輕鬆。

+0

可以請你澄清你的答案。什麼是inotify,它如何幫助解決這個問題? – Gordon 2013-03-19 10:07:17

相關問題