컬 호출 실행 후 파일이 다른 경우 파일 교체

컬 호출 실행 후 파일이 다른 경우 파일 교체

컬을 사용하여 실행해야 하는 URL이 있습니다. 상태가 200이면 응답이 임시 파일에 기록됩니다. 이제 이 임시 파일을 다른 파일과 비교해 보세요 ("/opt/proc/config/init.txt"). 임시 파일이 다른 경우 init.txt내용은 해당 임시 파일로 대체됩니다. 그러나 상태가 200이 아닌 경우 0이 아닌 상태 코드로 종료되고 메시지가 표시됩니다.

아래는 내가 얻은 것입니다. 이를 수행하는 더 좋고 효율적인 방법이 있습니까? 가능하다면 이 모든 작업을 한 줄로 수행할 수 있습니까?

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 지문을 생성하고 지문을 비교할 수도 있습니다. 두 파일이 다른 오프셋이나 줄 번호 같은 세부 사항은 신경 쓰지 않기 때문에 두 파일이 정확히 동일한지 여부만 알고 싶을 것입니다. 그럼에도 불구하고 파일이 매우 크지 않으면 여기서 성능 문제에 대해 걱정하지 않습니다.

왜 단순히 사용하지 않는가?-o, --output 옵션다운로드한 파일을 디스크에 쓰시겠습니까?

또는 다른 방법을 사용하여 응답 헤더를 구문 분석하는 대신 sed다음을 사용하십시오.컬 변수즉, 사용 가능합니다 %{response_code}.

관련 정보