[英]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.