I want to check with a file loop like this, if files with a given pattern exist:
while [ ! -f "/tmp/?????-Stock.txt" ] do sleep 2 done
If more files like 12aaa-Stock.txt, 34aaa-Stock.txt are present I have a message error like binary operator expected.
Advertisement
Answer
You can work around this by using a for-loop, e.g,.
DONE=no
while [ "$DONE" = no ]
do
for name in /tmp/?????-Stock.txt
do
if [ -f "$name" ]
then
DONE=yes
break
fi
done
[ "$DONE" = no ] && sleep 2
done
As long as there are no files found, the for-loop has one item to process (the unmatched pattern). If multiple files are found, the for-loop exits immediately on the first match.
@chepner notes that I could have used break 2 (old habits die hard). That would look like this:
while :
do
for name in /tmp/?????-Stock.txt
do
[ -f "$name" ] && break 2
done
sleep 2
done