Shell-Script

如何找對外連結接被重定向的位置

  • November 24, 2016

我目前正在編寫一個更新文件的腳本。該文件有多個版本。重要的有靜態連結。這些被重定向到實際文件,然後使用wget. 我發現wget有一個標誌可以列印收到的標題。有一個位置列表。標頭中的最後一個位置是實際的 URL。我需要得到那個!

我的想法是用來wget -S獲取標題(我需要另一個標誌來阻止文件下載和創建)。然後使用管道解析行並擷取最後一行包含location. 我想這可以通過使用來實現grep -l -i "location:" | tail -l。然後我應該留下一行可以輕鬆解析的行。

所以命令看起來像這樣:

# The -??? flag is the one that prevents the file from downloading. (I don't know it)
Location=$(wget -S -??? $URL | grep -l -i "location:" | tail -l)

我的問題是我必須使用什麼標誌來不下載文件,wget或者是否有其他方式/命令來完成此操作?

你想要的是一個 HEAD 請求,但wget不支持它;curl做。

您的發行版很可能curl在儲存庫中。

curl -s -I $URL -L | awk '/Location: (.*)/ {print $2}' | tail -n 1

$ URL=http://unix.stackexchange.com/questions/89282/
$ curl -s -I $URL | awk '/Location: (.*)/ {print $2}' | tail -n 1
/questions/89282/how-to-figure-out-where-a-link-gets-redirected
$ _

這裡:

  • -s防止curl顯示進度條;
  • -I發出curlHEAD 請求;
  • -L進行curl跟隨重定向(感謝@brianstone),您可能希望或不希望包含此內容,具體取決於您要跟踪的重定向標頭;
  • awk 腳本在括號中列印匹配的表達式,只是 URI 的本地部分。

引用自:https://unix.stackexchange.com/questions/89282