フォルダ内のすべての画像を探し、ImageMagickを使用してエンディングが破損していることを確認するbashスクリプトを作成しています。
自動化するコマンドは次のとおりです。
identify -verbose *.jpg 2>&1 | grep "Corrupt" | egrep -o "([\`].*[\'])"
私が経験している問題は、認識コマンドを変数に保存することです。
コマンドには複数のタイプの引用符があります。エラーが発生し続けます。行8:破損:コマンドが見つかりません。
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
corrupt = "identify -verbose \"$f\" 2>&1 | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\""
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
このコマンドを適切にエスケープする方法はありますか?
修正する:
いくつかの進捗状況:
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
echo "Processing $f"
corrupt="identify -verbose $f 2>&1 | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\""
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
これ以上エラーは発生しませんが、変数を文字列として保存するようです。
このコマンドをどのように実行できますか?
更新:少し進歩がありました。これでコマンドが実行中です。
#!/bin/bash
# This script will search for all images that are broken and put them into a text file
FILES="*.jpg"
for f in $FILES
do
echo "Processing $f"
corrupt=`identify -verbose $f | grep \"Corrupt\" | egrep -o \"([\`].*[\'])\"`
$corrupt
if [ -z "$corrupt" ]
then
echo $corrupt
else
echo "not corrupt"
fi
done
しかし、パイプの出力は別々です。
Processing sdfsd.jpg
identify-im6.q16: Premature end of JPEG file `sdfsd.jpg' @ warning/jpeg.c/JPEGWarningHandler/387.
identify-im6.q16: Corrupt JPEG data: premature end of data segment `sdfsd.jpg' @ warning/jpeg.c/JPEGWarningHandler/387.
決勝戦のみ必要「sdfsd.jpg」ひも。
答え1
破損した画像を識別する方法を探している可能性があります。ツールの終了ステータスを簡単に照会して、identify
画像ファイルを認識したかどうかを確認できます。
#!/bin/sh
for name in *.jpg; do
if identify -regard-warnings -- "$name" >/dev/null 2>&1; then
printf 'Ok: %s\n' "$name"
else
printf 'Corrupt: %s\n' "$name"
fi
done
終了ステータスは、上記のファイルidentify
が破損しているかどうかを確認するために使用されます。-regard-warnings
オプション上記の警告をエラーにアップグレードすると、ユーティリティの終了ステータスに影響を与えます。
実際のワイルドカードパターンを変数に保存する必要はほとんどありません。通常、ツールの出力を解析せずにユーティリティの終了ステータス(上記のように)をテストして、ユーティリティの成功/失敗ステータスを取得できます。
以前のImageMagickバージョン(6.9.12.19を使用している)convert
の場合identify
。
#!/bin/sh
for name in *.jpg; do
if convert -regard-warnings -- "$name" - >/dev/null 2>&1; then
printf 'Ok: %s\n' "$name"
else
printf 'Corrupt: %s\n' "$name"
fi
done
上記のループは各画像を変換しようとし、画像ファイルの処理が失敗した場合は文でそれを検出しますif
。変換操作の結果を削除します。