我想知道如何检查目录中是否存在与某个正则表达式匹配的文件。目前,我正在使用以下方法,但在某些情况下会返回错误:
ls srv_*.log
字符串上述命令将导致ls:cannot access srv_*.log:No such file or directory如果目录中没有与正则表达式匹配的文件,则会出现此错误。我尝试匹配的正则表达式是**“srv_*.log”**有人有什么想法吗?谢谢.
kyxcudwk1#
使用find一个简单的例子,
find $DIR -type f -name "srv_*.log"
字符串
00jrzges2#
srv_*.log不是一个正则表达式,而是一个全局匹配器。您可以捕获输出并将stderr重定向到/dev/null:
srv_*.log
FILES_LIST="$(ls srv_*.log 2>/dev/null)" for file in $FILES_LIST; do #something with $file done
字符串你甚至可以在这里不使用FILES_LIST。
FILES_LIST
6qqygrtg3#
来自bash联机帮助页:如果设置了nullglob选项,但未找到匹配项,则删除该单词。如果设置了failglobshell选项,但未找到匹配项,则输出错误消息,并且不执行该命令。这意味着您可能需要
bash
shopt -s nullglob
bakd9h0s4#
假设你在好的目录中,你可以做:
shopt -s nullglob set -- srv_*.log if [ $# -gt 0 ] then #do your stuff fi
字符串$#包含匹配文件的数量
$#
ymzxtsji5#
Bash有一个内置的命令:
compgen -G [GLOB]
5条答案
按热度按时间kyxcudwk1#
使用find
一个简单的例子,
字符串
00jrzges2#
srv_*.log
不是一个正则表达式,而是一个全局匹配器。您可以捕获输出并将stderr重定向到/dev/null:
字符串
你甚至可以在这里不使用
FILES_LIST
。6qqygrtg3#
来自
bash
联机帮助页:如果设置了nullglob选项,但未找到匹配项,则删除该单词。如果设置了failglobshell选项,但未找到匹配项,则输出错误消息,并且不执行该命令。
这意味着您可能需要
字符串
bakd9h0s4#
假设你在好的目录中,你可以做:
字符串
$#
包含匹配文件的数量ymzxtsji5#
Bash有一个内置的命令:
字符串