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

xqkwcwgp  于 2024-01-06  发布在  Linux
关注(0)|答案(5)|浏览(146)

我想知道如何检查目录中是否存在与某个正则表达式匹配的文件。目前,我正在使用以下方法,但在某些情况下会返回错误:

ls srv_*.log

字符串
上述命令将导致ls:cannot access srv_*.log:No such file or directory如果目录中没有与正则表达式匹配的文件,则会出现此错误。
我尝试匹配的正则表达式是**“srv_*.log”**
有人有什么想法吗?
谢谢.

kyxcudwk

kyxcudwk1#

使用find
一个简单的例子,

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

字符串

00jrzges

00jrzges2#

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

6qqygrtg

6qqygrtg3#

来自bash联机帮助页:
如果设置了nullglob选项,但未找到匹配项,则删除该单词。如果设置了failglobshell选项,但未找到匹配项,则输出错误消息,并且不执行该命令。
这意味着您可能需要

shopt -s nullglob

字符串

bakd9h0s

bakd9h0s4#

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

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

字符串
$#包含匹配文件的数量

ymzxtsji

ymzxtsji5#

Bash有一个内置的命令:

compgen -G [GLOB]

字符串

相关问题