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

问题描述 投票:-2回答:1

这个问题在这里已有答案:

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

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

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

bash unix
1个回答
2
投票

仅限代码的答案。可根据要求提供说明

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='()'
© www.soinside.com 2019 - 2024. All rights reserved.