我有一个完整的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
如何测试文件是否存在?
答案 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是否扩展了模式。这适用于sh
和bash
:
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的返回值。