簡體   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