0

識別コマンドからの出力を含むファイルがあります。次のようになります (次の形式: FILENAME FORMAT SIZE METADATA )

/foo/bar.jpg JPEG 2055x1381 2055x1381+0+0 8-bit DirectClass 
/foo/ham spam.jpg JPEG 855x781 855x781+0+0 8-bit DirectClass
...

ファイル名にはスペースを含めることができることに注意してください。私がやりたいことは、基本的にこれらの各行でこれを実行することです:

convert -size <SIZE> -colors 1 xc:black <FILENAME>

つまり、既存のイメージの空白のイメージを作成します。cat/sed/xargs でこれを試してみましたが、頭が爆発しています。ヒントはありますか?そしてできればコマンドラインソリューション..

4

3 に答える 3

1

そのファイル名が「JPEG」の前の文字列であると仮定します。

LINE="/foo/ham spam.jpg JPEG 855x781 855x781+0+0 8-bit DirectClass"

ファイル名は次のように取得できます。

FILENAME=$(echo "$LINE" | sed 's/\(.*\) JPEG.*/\1/')
于 2011-08-01T10:54:27.227 に答える
1
cat data_file | sed -e 's/\(.*\) JPEG \([^ ]*\) .*/convert -size \2 -colors 1 xc:black "\1"/' | bash
于 2011-08-01T11:45:53.373 に答える
0

Michałが提案することを行うことができます。また、メタデータの単語数が決まっている場合は、次のように簡単に実行できます (すべての行を処理すると仮定します)。

FILENAME=`echo $LINE | rev | cut -d\  -f 6- | rev`

(つまり、行を逆にして、6 番目のパラメーターから名前を取得すると、適切なファイル名を取得するために逆にする必要があります。)

そうでない場合は、すべての画像に拡張子があり、拡張子自体にスペースがないという事実を利用して、その後最初のスペースまで拡張子を検索できます。

FILENAME=`echo $LINE | sed -e '/([^.]+) .*$/\1/'`
于 2011-08-01T11:10:35.993 に答える