如何在Bourne shell中使用通配符检查文件是否存在?

时间:2009-08-20 13:44:11

标签: shell unix scripting

我正在寻找的是:

if [ -f "filenam*" ]; then
   ...
fi

但是通配符(*)会导致问题。

我也试过了:

if [ `ls filenam* > /dev/null 2>&1` ]; then
   ...
fi

哪些可能在其他shell中有效但在Bourne shell(sh)中似乎不起作用。

感谢您的帮助!

编辑:抱歉,不是C shell,Bourne shell(sh)。

5 个答案:

答案 0 :(得分:2)

而不是使用test -n $(ls filenam*),您可能更喜欢:

if ls filenam* 2> /dev/null | grep . > /dev/null; then
   ...
fi

答案 1 :(得分:0)

由于这是基于C的,您可能需要glob命令:

ls `glob filenam*`

答案 2 :(得分:0)

你走在正确的轨道上。试试这个:

if [ ! -z `ls filenam*` ] ; then
    ...
fi

这将检查ls是否返回任何内容。

答案 3 :(得分:0)

因为这是csh,所以:

foreach i (`ls -d filenam*`)
    ...
end

答案 4 :(得分:0)

我喜欢这个:

function first() { echo "$1" ; }
[ -e $(first filenam*) ] && echo "yes" || echo "no"