如何检查与bash脚本中的目录中是否存在匹配正则expression式的文件?

我想找一种方法来检查某个目录中是否存在匹配某个正则expression式的文件。 目前,我正在使用以下方法,但在某些情况下会返回一个错误:

ls srv_*.log 

上面的命令会导致ls:不能访问srv _ *。log:如果在与正则expression式匹配的目录中没有文件,则不存在这样的文件或目录

我试图匹配的正则expression式是“srv _ *。log”

有没有人有任何想法?

谢谢。

srv_*.log不是一个正则表达式,而是一个glob匹配器。

您可以捕获输出并将stderr重定向到/ dev / null:

 FILES_LIST="$(ls srv_*.log 2>/dev/null)" for file in $FILES_LIST; do #something with $file done 

而且你甚至可以在这里没有FILES_LIST

使用查找

一个简单的例子,

 find $DIR -type f -name "srv_*.log" 

bash manpage:

如果设置了nullglob选项,并且没有找到匹配项,则删除该单词。 如果设置了failglob shell选项,并且找不到匹配项,则会打印一条错误消息,并且不执行该命令。

这意味着你可能想要

 shopt -s nullglob 

假设你在好的目录中,你可以这样做:

 shopt -s nullglob set -- srv_*.log if [ $# -gt 0 ] then #do your stuff fi 

$#包含匹配文件的数量