我有一个bash脚本,它遍历目录列表,如果某个目录包含zip文件,它将zip文件名绑定到变量并对其执行一些操作,然后转到此目录中的另一个。不幸的是,当每个目录有一个zip文件时,它可以工作。如果更多 - 它给出错误“二元运算符预期”
脚本:
if [ -e $currdir/*.zip ]; then
for file in $currdir/*.zip; do
echo the zip is "${file##*/}"
done
请帮我修改相应的脚本。
答案 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/WordSplitting和http://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