Regex 在bash中检查文件的正则表达式

Regex 在bash中检查文件的正则表达式,regex,file,bash,Regex,File,Bash,是否可以检查bash中是否存在带有正则表达式的文件 我做了如下尝试: if [ -f /path/to/file*.txt ] 但不幸的是,这不起作用 有人知道这是怎么可能的吗?只要有一个文件与模式匹配,您的方法就可以工作。bash首先展开通配符,生成如下调用: if [ -f /path/to/file*.txt ] if [ -f /path/to/file1.txt ] if [ -f /path/to/file1.txt /path/to/file2.txt ] 取决于匹配的数量(分

是否可以检查bash中是否存在带有正则表达式的文件

我做了如下尝试:

if [ -f /path/to/file*.txt ]
但不幸的是,这不起作用


有人知道这是怎么可能的吗?

只要有一个文件与模式匹配,您的方法就可以工作。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 '.'

只要有一个文件与模式匹配,您的方法就可以工作。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 '.'
正如@thiton所解释的,当存在多个与glob匹配的文件时,glob被展开,并且检查失败

您可以改为利用
compgen
,如下所述

这里有一个例子

if $(compgen -G "/path/to/file*.txt" > /dev/null); then
    echo "Some files exist."
fi
正如@thiton所解释的,当存在多个与glob匹配的文件时,glob被展开,并且检查失败

您可以改为利用
compgen
,如下所述

这里有一个例子

if $(compgen -G "/path/to/file*.txt" > /dev/null); then
    echo "Some files exist."
fi

-e是工作,-f不工作。作为正则表达式,“file*.txt”将匹配“fil.txt”和“fileeee.txt”,但不匹配“filefoo.txt”。glob不是正则表达式。嗯,很有趣。我试试看。谢谢。QQ..该目录中是否有一个文件或可能有多个文件?-e是有效的,-f不起作用。作为正则表达式,“file*.txt”将匹配“fil.txt”和“fileeee.txt”,但不匹配“filefoo.txt”。glob不是正则表达式。嗯,很有趣。我试试看。谢谢。QQ。那个目录里有一个文件吗?或者可能有多个文件?