シェルスクリプトでリモートファイルの変更時間とサイズを取得するには?

シェルスクリプトでリモートファイルの変更時間とサイズを取得するには?

次のような多くの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リストの順序に従います。

おすすめ記事