我有一个包含完整 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
如何测试文件是否存在?
我有一个包含完整 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
如何测试文件是否存在?
你可以这样做:
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.
尤金 y 的回答略有不同:
test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists
只需检查外壳是否扩展了模式。这适用于sh和bash:
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
我会使用:
if ls name1.*.r9.bz2 &> /dev/null ; then
echo exists
fi
尝试类似的东西
FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
echo "Files!"
else
echo "No Files"
fi
相关文章: 检查shell脚本中是否存在带有通配符的文件
似乎有一个很好的答案,使用 ls 的返回值。