如何使用模式检查文件是否存在?

时间:2010-04-13 15:22:19

标签: sh

我有一个完整的svn备份目录,名称如下:

name1.20100412.r9.bz2
name1.20100413.r10.bz2
name2.20100411.r101.bz2
name3.20100412.r102.bz2
...

我需要使用名称和修订号来检查备份文件是否存在。我试过了test,但它不起作用:

if [ -e name1.*.r9.bz2 ]; then echo exists; fi
[: too many arguments

如何测试文件是否存在?

6 个答案:

答案 0 :(得分:3)

你可以这样做:

shopt -s nullglob
set -- name1.*.r9.bz2
if [ -n "$1" ]; then echo exists; fi

pattern="name1.*.r9.bz2"
if [ "$(echo $pattern)" != "$pattern" ]; then echo exists; fi

修改:已添加shopt -s nullglob

答案 1 :(得分:2)

eugene y的回答略有不同:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists

答案 2 :(得分:1)

检查shell是否扩展了模式。这适用于shbash

pattern="name1.*.r9.bz2"

if [ "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi

P.S。如果模式本身可以是有效的文件名,则可以添加-e检查:

if [ -e "$pattern" -o "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi

答案 3 :(得分:0)

我会用:

if ls name1.*.r9.bz2 &> /dev/null ; then
  echo exists
fi

答案 4 :(得分:-1)

尝试类似

的内容
FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
  echo "Files!"
else
  echo "No Files"
fi

答案 5 :(得分:-1)

相关文章: Check if a file exists with wildcard in shell script

似乎有一个很好的答案,使用ls的返回值。

相关问题