Bash获取dir中的zip文件列表并对每个文件执行一些操作

时间:2016-11-01 14:05:43

标签: bash loops

我有一个bash脚本,它遍历目录列表,如果某个目录包含zip文件,它将zip文件名绑定到变量并对其执行一些操作,然后转到此目录中的另一个。不幸的是,当每个目录有一个zip文件时,它可以工作。如果更多 - 它给出错误“二元运算符预期”

脚本:

    if [ -e $currdir/*.zip ]; then 
        for file in $currdir/*.zip; do
            echo the zip is "${file##*/}"
        done

请帮我修改相应的脚本。

3 个答案:

答案 0 :(得分:1)

如果您需要完全检查,那么您可以使用:

let action = SKAction.run { [weak self] in
    self?.myActionFunction()
}

但我更喜欢只循环包含* .zip扩展名的文件:

if [[ -n $(echo "$currdir"/*.zip) ]]; then
  for f in "$currdir"/*.zip; do
   echo "Processing $f file..";
  done
fi

答案 1 :(得分:0)

使用

for file in "$currdir"/*.zip; do
  [ -e "$file" ] || continue
  echo the zip is "${file##*/}"
done

正如评论中指出的那样,glob将在shell中发生,然后用输出调用[,即:

[ -e * ]

将成为:

[ -e Desktop Documents Downloads ... ]

因此,尝试扩展和检查for迭代将起作用。

请参阅:http://mywiki.wooledge.org/WordSplittinghttp://wiki.bash-hackers.org/syntax/expansion/globs

答案 2 :(得分:0)

我认为case构造经常被忽视。

  case *.jpg in *.jpg ) echo found files ;; * ) echo no files found  ;; esac

在我的目录中使用1000s + jpgs生成正确的消息; - )

jpg的引用更改为zip,看看它是否适合您。

IHTH