Shell-Script
如何找對外連結接被重定向的位置
我目前正在編寫一個更新文件的腳本。該文件有多個版本。重要的有靜態連結。這些被重定向到實際文件,然後使用
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
發出curl
HEAD 請求;-L
進行curl
跟隨重定向(感謝@brianstone),您可能希望或不希望包含此內容,具體取決於您要跟踪的重定向標頭;- awk 腳本在括號中列印匹配的表達式,只是 URI 的本地部分。