カール呼び出しの実行後にファイルが異なる場合

カール呼び出しの実行後にファイルが異なる場合

カールを使用して実行する必要があるURLがあります。状態が 200 の場合、応答は一時ファイルに書き込まれます。次に、この一時ファイルを他のファイルと比較してみてください("/opt/proc/config/init.txt")。一時ファイルが異なる場合、init.txt内容はその一時ファイルに置き換えられます。ただし、ステータスが 200 でない場合は、ゼロ以外のステータスコードで終了し、メッセージが表示されます。

以下は私が得たものです。これを行うより良い効率的な方法はありますか?可能であれば、これらすべてを1行で実行できますか?

URL="some_url"
# store the whole response with the status at the and
response=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL)
# extract the body
new=$(echo $response | sed -e 's/HTTPSTATUS\:.*//g')
# extract the status
status=$(echo $response | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
# print the body
echo "$new"
echo $new > /opt/proc/config/temp.txt

if [ $status -eq 200  ]; then
    if ! cmp /opt/proc/config/init.txt /opt/proc/config/temp.txt > /dev/null 2>&1
    then
      echo different
      mv /opt/proc/config/temp.txt /opt/proc/config/init.txt
    else
      echo same
    fi
else
  echo "Error [HTTP status: $status]"
  rm /opt/proc/config/temp.txt
  exit 1
fi

ベストアンサー1

ファイルを比較するために何を使用するのかわかりませんcmp。たぶん、各ファイルのmd5またはsha1フィンガープリントを作成し、フィンガープリントを比較することもできます。 2つのファイルが異なるオフセットや行番号などの詳細は気にしないので、両方のファイルがまったく同じかどうかを知りたいのです。それにもかかわらず、ファイルが非常に大きくない場合は、ここでパフォーマンスの問題を心配しません。

なぜ単に使用しないのですか?-o, --output オプションダウンロードしたファイルをディスクに書きますか?

別の方法を使用して応答ヘッダーを解析する代わりに、sed次のようにします。カール変数つまり、利用可能です%{response_code}

おすすめ記事