引用符をエスケープする Bash スクリプト

引用符をエスケープする Bash スクリプト

フォルダ内のすべての画像を探し、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。変換操作の結果を削除します。

関連情報