쉘 스크립트에서 원격 파일 수정 시간과 크기를 얻는 방법은 무엇입니까?

쉘 스크립트에서 원격 파일 수정 시간과 크기를 얻는 방법은 무엇입니까?

다음과 같이 많은 HTML 형식이 포함된 Linux VPS가 있습니다.

<table>
    <thead>
        <tr>
            <th>ver</th>
            <th>link</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1.0.1</td>
            <td><a href="http://speedtest.tokyo2.linode.com/100MB-tokyo2.bin">download</a></td>
        </tr>
        <tr>
            <td>1.0.2</td>
            <td><a href="http://speedtest.singapore.linode.com/100MB-singapore.bin">download</a></td>
        </tr>
        <tr>
            <td>1.0.3</td>
            <td><a href="http://speedtest.fremont.linode.com/100MB-fremont.bin">download</a></td>
        </tr>
        <tr>
            <td>1.0.4</td>
            <td><a href="http://speedtest.dallas.linode.com/100MB-dallas.bin">download</a></td>
        </tr>
        <tr>
            <td>1.0.5</td>
            <td><a href="http://speedtest.atlanta.linode.com/100MB-atlanta.bin">download</a></td>
        </tr>
    </tbody>
</table>

양식은 버전 번호와 파일 다운로드 링크만 포함되어 비교적 간단합니다.

쉘 스크립트를 사용하여 테이블의 URL에 액세스하여 원격 파일의 날짜와 크기를 가져온 다음 이 정보를 테이블에 업데이트하고 싶습니다.

그들은 결국 다음과 같이 보일 것입니다:

여기에 이미지 설명을 입력하세요.

질문을 하기 전에 컬 테스트가 표준 출력에서 ​​파일 정보를 볼 수 있는 컬 및 wget 문서를 살펴봤지만 이를 수행하기 위해 자동화된 스크립트를 작성하는 방법을 모르겠습니다. 방금 Linux를 접하게 되었는데 도움을 주셨으면 좋겠습니다. 감사합니다!

답변1

그러면 헤더에서 얻을 수 있는 파일 정보가 반환됩니다.

curl --head http://speedtest.newark.linode.com/100MB-newark.bin

다음을 반환합니다.

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 28 Sep 2019 12:47:03 GMT
Content-Type: application/octet-stream
Content-Length: 104857600
Last-Modified: Thu, 01 Aug 2019 16:35:25 GMT
Connection: keep-alive
ETag: "5d4314cd-6400000"
Accept-Ranges: bytes

이것이 필요한 경우 bash 스크립트를 작성하여 이 정보가 포함된 테이블/html 파일을 생성할 수 있습니다.

다음과 같은 스크립트에서 사용할 수 있습니다.

#!/bin/sh

cat  << EOF
<table>
    <thead>
        <tr>
            <th>ver</th>
            <th>link</th>
            <th>modified</th>
            <th>size</th>
        </tr>
    </thead>
    <tbody>
EOF

$i=1

cat urls.list | while read url
do
        file_info=$(curl -s --head "$url")
        last_modified=$(echo "$file_info" | grep Last-Modified | cut -c16- | tr -d '\r\n')
        content_length=$(echo "$file_info" | grep Content-Length | cut -c17- | tr -d '\r\n')

cat  << EOF
        <tr>
            <td>1.0.$i</td>
            <td><a href="$url">download</a></td>
            <td>$last_modified</td>
            <td>$content_length</td>
        </tr>
EOF
let "i++"
done

cat << EOF
    </tbody>
</table>
EOF

urls.list각 줄에 URL이 포함되어야 하는 파일을 만들어야 합니다 . 그렇게:

http://speedtest.newark.linode.com/100MB-newark.bin
http://speedtest.tokyo2.linode.com/100MB-tokyo2.bin

이 스크립트를 실행하면 다음과 같은 출력이 생성됩니다.

<table>
    <thead>
        <tr>
            <th>ver</th>
            <th>link</th>
            <th>modified</th>
            <th>size</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1.0.1</td>
            <td><a href="http://speedtest.newark.linode.com/100MB-newark.bin">download</a></td>
            <td>Thu, 01 Aug 2019 16:35:25 GMT</td>
            <td>104857600</td>
        </tr>
    </tbody>
</table>

특정 버전 이름이 필요한 경우 구분 기호(예: )를 사용하여 목록 파일에 저장할 수 있습니다 version name|url. 그리고 코드를 약간 조정해야 합니다. 이제 URL 목록의 순서를 따릅니다.

관련 정보