4

我有一个包含完整 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

如何测试文件是否存在?

4

6 回答 6

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.

于 2010-11-04T00:30:50.567 回答
2

尤金 y 的回答略有不同:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists
于 2012-09-18T08:55:10.417 回答
1

只需检查外壳是否扩展了模式。这适用于shbash

pattern="name1.*.r9.bz2"

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

PS如果模式本身可以是一个有效的文件名,你可以添加一个-e检查:

if [ -e "$pattern" -o "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi
于 2010-04-13T15:32:15.283 回答
0

我会使用:

if ls name1.*.r9.bz2 &> /dev/null ; then
  echo exists
fi
于 2012-09-29T08:04:00.540 回答
-1

尝试类似的东西

FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
  echo "Files!"
else
  echo "No Files"
fi
于 2010-04-13T15:54:03.360 回答
-1

相关文章: 检查shell脚本中是否存在带有通配符的文件

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

于 2013-09-22T20:09:46.690 回答