0

画像の大きなリストの親指を作成したい。問題は、行の読み取りが大きなリストで非常に遅いように見えることです。私が考えることができる 1 つの解決策は、最大 500 行を含むファイルを作成し、それらを 1 つずつ読み取ることです。しかし、この問題に対するスマートな解決策はありますか?

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

2 に答える 2

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 バイトです。これは多くのように聞こえますが、誤解を招く可能性があります。ファイル名は非常に長くなる可能性があります。特に、ディレクトリ パスが含まれている場合はそうです。これは通常、テスト中は合格するのに十分な長さですが、実際に機能するために本当に依存している場合は失敗します。と。それは静かに失敗します。最後のいくつかのファイル名が削除されたことを決して知りません。

最善の策は、環境変数にイメージをロードするのではなく、イメージ名のリストを含むファイルを作成することです。

于 2013-09-25T00:57:13.570 に答える
-1

もう一度試してみましょう:

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

于 2013-09-24T23:59:53.720 に答える