![如何从 shell 脚本获取远程文件修改时间和大小?](https://linux22.com/image/161421/%E5%A6%82%E4%BD%95%E4%BB%8E%20shell%20%E8%84%9A%E6%9C%AC%E8%8E%B7%E5%8F%96%E8%BF%9C%E7%A8%8B%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4%E5%92%8C%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
我有一个Linux VPS,上面有很多HTML表单,如下:
<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>
表格比较简单,只有版本号和文件下载链接。
我想使用 shell 脚本访问表中的 URL,以获取远程文件的日期和大小,然后将此信息更新到表中。
它们最终会是这样的:
在提出问题之前,我查看了curl和wget文档,其中curl测试可以查看标准输出中的文件信息,但我不知道如何编写自动化脚本来完成此任务。我刚刚接触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 列表的顺序。