是否可以在bash中检查文件是否存在正则表达式?
我尝试如下:
if [ -f /path/to/file*.txt ]
但不幸的是,这不起作用。
有谁知道这是怎么回事?
答案 0 :(得分:3)
只要只有一个文件与模式匹配,您的方法就会起作用。 bash首先扩展通配符,从而产生如下调用:
if [ -f /path/to/file*.txt ]
if [ -f /path/to/file1.txt ]
if [ -f /path/to/file1.txt /path/to/file2.txt ]
取决于匹配数(分别为0,1,2)。要检查是否存在,您可以使用find:
find /path/to -name 'file*.txt' | grep -q '.'
答案 1 :(得分:0)
正如@thiton所解释的,glob
(not a real regexp)已展开,并且当存在多个与glob匹配的文件时,检查失败。
您可以改用compgen
,如此处所述
Test whether a glob has any matches in bash
Read more on the man page of compgen
这是一个例子
if $(compgen -G "/path/to/file*.txt" > /dev/null); then
echo "Some files exist."
fi