繁体   English   中英

虽然读线很慢

[英]While read line is very slow

我想为大量图像创建缩略图。 问题是,似乎在大列表读取行中速度很慢。 我能想到的一种解决方案是创建最多包含500行的文件,然后一一读取。 但是有没有针对此问题的智能解决方案?

while read line; do
  if [ -e "$line" ] && [ ! -z "$line" ]; then
              ...
  fi
}
done <<< "$imagesList"

您的问题是您正在使用HERE字符串通过<<<读取这些行。 如果HERE字符串很大,这将很慢。

如果$imgageList是文件,则可以执行文件重定向,这会快很多:

while read line
do
    if [ -e "$line" -a ! -z "$line" ]
    then
       ...
    fi
done < "$imagesList_file"  # Redirect from a file.

您可能可以执行以下操作:

echo "$imagesList" | while read line
    do
    if [ -e "$line" -a ! -z "$line" ]
    then
       ...
    fi
done

但是,我会担心命令行超载。 在Linux / Unix系统中,这是在/usr/include/sys/syslimits.h/usr/include/syslimits.h定义的。 在我的系统上为1024 * 256或262,144字节。 这听起来很多,但可能具有欺骗性。 文件名可能会很长-特别是如果其中包含目录路径。 当您进行测试时,这通常足够长,但是如果您真的真的要依靠它来工作,则失败了。 和。 它无声地失败了。 您永远不会知道最后几个文件名已删除。

最好的选择是创建一个包含图像名称列表的文件,而不是将其加载到环境变量中。

让我们再试一次:

echo $imagelist | xargs --delimiter=\  --max-args=1 -i echo "Do something with {}"

-8 <第一版-8 <-

尝试这样的事情:

for IMG in $imageList; do
    echo "Do something with ${IMG}"
done

-> 8第一版-> 8-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM