我想为大量图片创建大拇指。 问题是,看起来虽然大型列表的读取行很慢。我能想到的一个解决方案是创建包含最多500行的文件,然后逐个读取它们。但这个问题是否有任何智能解决方案?
while read line; do
if [ -e "$line" ] && [ ! -z "$line" ]; then
...
fi
}
done <<< "$imagesList"
答案 0 :(得分:1)
您的问题是您使用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字节。这听起来很多,但可能具有欺骗性。文件名可能很长 - 特别是如果您在其中包含目录路径。这通常足够长,以便在您进行测试时通过,但是当您确实真正依赖它工作时会失败。和。它无声地失败了。你永远不会知道最后几个文件名已被删除。
最好的办法是创建一个包含图像名称列表的文件,而不是在环境变量中加载它们。
答案 1 :(得分:-1)
让我们再试一次:
echo $imagelist | xargs --delimiter=\ --max-args=1 -i echo "Do something with {}"
--- 8&lt;第一版--- 8&lt; ---
尝试这样的事情:
for IMG in $imageList; do
echo "Do something with ${IMG}"
done
---&gt; 8第一版---&gt; 8 ---