检查目录是不是存在并计算与其中模式匹配的文件[重复]
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,这是预期的吗?..以上是关于检查目录是不是存在并计算与其中模式匹配的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章