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

时间:2011-12-14 14:40:05

标签: linux bash

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

ls srv_*.log

上述命令将导致 ls:无法访问srv _ * .log:如果目录中没有与正则表达式匹配的文件,则无此文件或目录

我想要匹配的正则表达式是“srv _ * .log”

有没有人有任何想法?

感谢。

4 个答案:

答案 0 :(得分:4)

使用find

一个简单的例子,

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

答案 1 :(得分:2)

srv_*.log不是正则表达式,而是全局匹配器。

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

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

你甚至可以在这里没有FILES_LIST

答案 2 :(得分:0)

来自bash联机帮助页:

  

如果设置了 nullglob 选项,但未找到匹配项,则单词为   除去。如果设置了 failglob shell选项,则不匹配   找到后,将打印一条错误消息并且不执行该命令。

意思是你可能想要

shopt -s nullglob

答案 3 :(得分:0)

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

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

$#包含匹配文件的数量