Bash 스크립트에서 HTTP를 통한 원격 파일의 수정 시간 가져 오기


13

HTTP를 통해 원격 파일의 파일 수정 시간 / 날짜를 추출하는 간단한 Bash 스크립트를 작성 중입니다.

예제 파일 : http://example.com/bar/example.pdf

실제 파일 다운로드 하지 않고도이 작업을 수행 할 수 있습니까 ? 그렇지 않은 경우 가장 좋은 대안은 무엇입니까?

답변:


13

솔직히 말해서 직접적이 아닙니다.

파일에 대한 정보를 얻으려면 원격 사이트에서 데이터를 가져와야합니다. 일반적으로 이것은 HEAD요청 으로 수행 되지만 일부 (대부분의) 서버는 GET요청을 수행하는 것처럼 올바르게 구현하지 않고 전체 파일을 전달하지 않습니다 . curl설치 했다고 가정합니다 .

curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'

원하는 것을 줄 수 있지만 말했듯이 서버에 크게 의존합니다.


6
"대부분"? 인기있는 HTTP 서버 하나가 그러한 방식으로 프로토콜을 위반 한 경우 놀랍습니다 .
user1686

물론 바뀌었을 것입니다. 얼마 전, 그런 문제를 다룰 때, 그랬습니다. 그러나 시간이지나갑니다. "앱"이 무엇이든 여전히 cgi를 실행하는 사이트를 찾으면 대부분 처리하지 않을 것 HEAD입니다. 그럼에도 불구하고, 그 사이트들은 모든 것을 제공해야하기 때문에 결과를 줄 것입니다.
Karsten S.

3
더 간결 --head하지 않고 옵션을 사용하는 것이 좋습니다 -X HEAD. curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
Gautham C.

1
curl -svX HEAD더 간결합니다 ...
Karsten S.

1
@ Hi-Angel 아니요, 일반적으로 없습니다. Wget은 If-Modified-Since 헤더를 사용하여 "이 날짜보다 최신 인 경우 해당 파일 만 보내십시오"라고 말하며 서버는 해당 헤더를 구현하고 존중합니다. 서버가 파일이 변경되지 않았다고 생각하면 304 NOT MODIFIED 응답을 보냅니다.
antonagestam

12

서버 응답에는 일반적으로 Last-Modified필드가 있으므로 파일을 다운로드하지 않고도 확인할 수 있습니다. 를 사용할 필요가 없으며 -X HEAD, 특별한 옵션 -I이 있습니다 ( -s진행 출력 억제) :

curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified

또한, 내 경우에는 설치된 컬이 없다 (나는 임베디드 장치에 대한 스크립트를하고있어) 그냥 wget. wget의 방법은 다음과 같습니다.

wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified

--server-response인쇄 헤더 및 --spider옵션의 힘은 페이지를 다운로드 아니라 자신의 존재를 확인하지합니다.


2
이것은 curl허용되는 것보다 더 나은 대답입니다. 아마도 grep -i"마지막으로 수정 된 것"은 종종 다른 경우가 있기 때문에 아마도 사용 합니다.
not2qubit

메모에 대한 @ not2qubit thx가 편집되었습니다.
Hi-Angel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.