我希望找到一种方法来检查目录中是否存在与某个正则表达式匹配的文件。目前,我使用以下方法,但在某些情况下会返回错误:
ls srv_*.log
上述命令将导致 ls:无法访问srv _ * .log:如果目录中没有与正则表达式匹配的文件,则无此文件或目录。
我想要匹配的正则表达式是“srv _ * .log”
有没有人有任何想法?
感谢。
答案 0 :(得分:4)
答案 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
$#
包含匹配文件的数量