Linux
如何從 shell 腳本中獲取遠端文件修改時間和大小?
我有一個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,希望能得到大家的幫助,謝謝!
這將返回您可以從標頭中獲取的文件資訊:
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 腳本來生成包含該資訊的 table/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 列表的順序。