无法在带有结尾的文件夹中的特定文件上正确迭代{* -enterprise.ipa,*。apk}

时间:2017-07-20 14:11:22

标签: bash

我有一个包含这些应用文件的文件夹:

mles:fairs-ionic mles$ ls build
build/com.solutions.enterprise.fairs.dev_v2.2.0.17_20170720_1423-enterprise.ipa
build/com.solutions.enterprise.fairs_v2.2.0.17_20170720_1423-enterprise.ipa
build/de.fairs.dev_v2.2.0.17_20170720_1423-enterprise.apk
build/de.fairs_v2.2.0.17_20170720_1423-appstore.ipa
build/de.fairs_v2.2.0.17_20170720_1423-enterprise.apk

除了*-appstore.ipa之外,我需要重置所有这些内容。更具体地说是这一个:

mles:fairs-ionic mles$ ls build/{*-enterprise.ipa,*.apk}
build/com.solutions.enterprise.fairs.dev_v2.2.0.17_20170720_1423-enterprise.ipa
build/com.solutions.enterprise.fairs_v2.2.0.17_20170720_1423-enterprise.ipa
build/de.fairs.dev_v2.2.0.17_20170720_1423-enterprise.apk
build/de.fairs_v2.2.0.17_20170720_1423-enterprise.apk

在我的bash脚本中,我尝试过:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
appFiles=($(cd ${DIR}/build;ls {*-enterprise.ipa,*.apk}))
echo ${appFiles};
echo "loop"
for appFile in "${appFiles[@]}"
do
  echo ${appfile}
  #app_upload "${appfile}"
done

这会产生:

mles:fairs-ionic ben$ ./test.sh 
com.solutions.enterprise.fairs.dev_v2.2.0.17_20170720_1423-enterprise.ipa
loop

appFiles只包含一行,循环中的appfile变量始终为空。

我如何迭代build文件夹中的所有文件,除了文件名为build/de.fairs_v2.2.0.17_20170720_1423-appstore.ipa的appstore的.ipa文件?

3 个答案:

答案 0 :(得分:2)

变量appfile未定义appFile,因此请更改

echo ${appfile}

echo ${appFile}

编辑显示所有数据的行

echo ${appFiles}; 

echo ${appFiles[*]};

答案 1 :(得分:2)

您只需使用glob提供的扩展bash功能(请参阅Options which change globbing behavior),打开选项并将值存储到数组即可。在build/文件夹外部运行。

shopt -s extglob nullglob
fileList=( build/!(*-appstore.ipa) )

现在遍历数组并做任何你想做的事情。

for file in "${fileList[@]}"; do 
    printf "%s\n" "$file"
done

答案 2 :(得分:1)

您不需要创建一个选定文件数组,因为您可以使用带有大括号扩展的glob直接迭代它们,如下所示:

for file in build/*{-enterprise.ipa,.apk}; do
  echo "$file"
  # app_upload "$file"
done