检查目录是不是存在并计算与其中模式匹配的文件[重复]

Posted

技术标签:

【中文标题】检查目录是不是存在并计算与其中模式匹配的文件[重复]【英文标题】:Check if directory exists and count files matching a pattern in it [duplicate]检查目录是否存在并计算与其中模式匹配的文件[重复] 【发布时间】:2019-02-06 21:52:23 【问题描述】:

我的代码有一个目录路径传入,例如来自源的$D_path

现在我需要检查目录路径是否存在,以及该路径中具有模式 (*abcd*) 的文件的数量是否存在于 IF 条件中。

我不知道如何通过 bash Scripting 使用如此复杂的表达式。

【问题讨论】:

请考虑在您的问题中添加更多信息,以及您解决问题的努力,我们将很乐意为您提供帮助 【参考方案1】:

只有代码的答案。可根据要求提供说明

if [[ -d "$D_path" ]]; then
    files=( "$D_path"/*abcd* )
    num_files=$#files[@]
else
    num_files=0
fi

我忘记了这一点:默认情况下,如果没有与该模式匹配的文件,files 数组将包含一个带有文字字符串 *abcd* 的条目。要得到目录存在但没有文件匹配的结果 => num_files == 0,那么我们需要设置一个额外的 shell 选项:

shopt -s nullglob

这将导致不匹配文件的模式扩展为空。默认情况下,不匹配任何文件的模式将作为文字字符串扩展为该模式。

$ cat no_such_file
cat: no_such_file: No such file or directory
$ shopt nullglob
nullglob        off

$ files=( *no_such_file* ); echo "$#files[@]"; declare -p files
1
declare -a files='([0]="*no_such_file*")'

$ shopt -s nullglob

$ files=( *no_such_file* ); echo "$#files[@]"; declare -p files
0
declare -a files='()'

【讨论】:

嗨,格伦,非常感谢,它起作用了,但我想指出的信息的一件事是 ::对于不存在的目录,它去了 else ,但是对于没有文件的目录计数器值显示为 1,这是预期的吗?..

以上是关于检查目录是不是存在并计算与其中模式匹配的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查目录或子目录中是不是存在文件[重复]

检查目录是不是存在和权限[重复]

检查是不是存在与正则表达式匹配的数组键

检查目录是不是不存在[重复]

列出与Java中的模式匹配的目录中的文件[重复]

检查文件夹中是不是存在文件[重复]