我想找一种方法来检查某个目录中是否存在匹配某个正则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
$#
包含匹配文件的数量