忽略Shell脚本中的特定文件进行循环

时间:2018-12-02 16:04:20

标签: python shell for-loop yaml

我的shell脚本在给定目录中循环执行python脚本。我希望能够忽略特定文件export_config.yaml。当前在for循环中使用它,并在终端上打印出错误,我希望它完全忽略此文件。

yamldir=$1


for yaml in ${yamldir}/*.yaml; do

if [ "$yaml" != "export_config.yaml" ]; then

    echo "Running export for $yaml file...";
    python jsonvalid.py -p ${yamldir}/export_config.yaml -e $yaml -d ${endDate}
    wait

fi

完成

1 个答案:

答案 0 :(得分:2)

您在if语句中进行的字符串比较不匹配export_config.yaml,因为对于for循环的每次迭代,您都分配了整个相对文件路径(即“ $yamldir/export_config.yaml” ”,而不仅仅是“ export_config.yaml”。

第一个选择:更改您的$yaml语句以反映出该问题可以解决您的问题:

if

另一个选项:使用if [ "$yaml" != "${yamldir}/export_config.yaml" ]; then #etc... 仅捕获终端路径字符串(即文件名)。

basename

第三种选择:您可以通过执行for yaml in ${yamldir}/*.yaml; do yaml=$(basename $yaml) if [ "$yaml" != "export_config.yaml" ]; then #etc... 这样的循环来完全消除if语句:

for

通过将for yaml in $(ls ${yamldir}/*.yaml | grep -v "export_config.yaml"); do的输出传递到ls,您可以从目录列表的第一位排除包括grep -v的任何行。