2013-03-18 61 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

相关问题