我有 3 个文件,如下所示:
CV_REF_DATA_09012021.txt
DB_ONLINE_CL_09012021.txt
DFR_CL_INS_09012021.txt
我想检查文件是否存在于 /NAS/CFG/ 中,然后将其添加到数组中。不需要所有 3 个文件始终都存在。因此,它可以是 1、2 或全部 3 个文件。如果没有文件,脚本应该以同样的方式退出。接下来我想基于数组循环并运行“调用”脚本。
调用脚本也使用文件模式来检查文件计数。下面是调用脚本的代码。
NASFilecnt=`find . -type f -name "${CV_REF_DATA}*.txt" | wc -l`
那么,如何根据上述运行循环。如果有任何疑问,请告诉我。
根据文件的存在,您对想要发生的事情的描述有点模糊。您是否希望为每个文件名前缀单独或一起收集名称也不清楚。例如,最好选择一个特定的日期,然后尝试从中找到一组文件。下面的代码应该为您的编程工作提供一些支持。
这个答案与我对您之前问题的回答类似,因为我们将遍历一组静态字符串以测试是否存在包含这些字符串的文件名。
您可以遍历文件名前缀,并在每次迭代中检查是否存在具有该前缀(和
.txt
文件名后缀)的任何文件。循环遍历文件名前缀,并且在每次迭代中,我们尝试扩展应该匹配我们对该前缀感兴趣的文件的模式。该
set
命令会将匹配的文件名存储在位置参数列表中("$@"
;"$1"
是该列表的第一个元素)。在
bash
shell 中,我们可以将上面的代码块编写如下。nullglob
shell 选项使不匹配的通配模式消失而不是保持未扩展。我们使用命名数组 ,names
在每次迭代中保存任何匹配的文件名。对于您的问题的字面解释:如果目录中至少存在一个树文件名
CV_REF_DATA_09012021.txt
,DB_ONLINE_CL_09012021.txt
, 则调用其他脚本。将现有名称添加到数组中。DFR_CL_INS_09012021.txt
/NAS/CFG