0

28画像ソースを通常のリンクからhtmlファイルのbase64エンコーディングに変換するスクリプトを作ってみました。しかし、問題があります: sed が教えてくれることがあります

script.sh: 25 行目: /bin/sed: 引数リストが長すぎます

これはコードです:

#!/bin/bash
# usage: ./script.sh file.html


mkdir images_temp

for i in `sed -n '/<img/s/.*src="\([^"]*\)".*/\1/p' $1`;

    do echo "######### download the image";
    wget -P images_temp/ $i;

    #echo "######### convert the image for size saving";
    #convert -quality 70 `echo ${i##*/}` `echo ${i##*/}`.temp;

    #echo "######### rename temp image";
    #rm `echo ${i##*/}` && mv `echo ${i##*/}`.temp `echo ${i##*/}`;

    echo "######### encode in base64";
    k="`echo "data:image/png;base64,"`$(base64 -w 0 images_temp/`echo ${i##*/}`)";

    echo "######### deletion of images_temp pictures";
    rm images_temp/*;

    echo "######### remplace string in html";
    sed -e "s|$i|$k|" $1 > temp.html;

    echo "######### remplace final file";
    rm -rf $1 && mv temp.html $1;

    sleep 5;
done;

画像が ~128ko より大きい場合、$k 引数は sed には長すぎると思います。sed はそれを処理できません。

どうすれば機能しますか?

前もって感謝します !

PS1: 非常に醜いコードで申し訳ありません

PS2:または、Pythonでそれを行うにはどうすればよいですか? PHP ? 私は開いています!

4

1 に答える 1

1

base64 でエンコードされたイメージは数メガバイトになる可能性がありますが、システムによってパラメーターの最大長が制限される場合があります (従来は約 128k)。また、Sed は 8kb を超える行を処理できるとは限りませんが、GNU sed などのバージョンではさらに多くの行を処理できます。

sed を試してみたい場合は、コマンド ラインではなくファイルで指示を提供してください。それ以外の

sed -e "s|$i|$k|" $1 > temp.html;

使用する

echo "s|$i|$k|" > foo.sed
sed -f foo.sed "$1" > temp.html
于 2013-07-07T18:58:07.400 に答える