現在ファイルを更新するスクリプトを作成しています。このファイルには複数のバージョンがあります。重要なのは静的リンクです。これらは実際のファイルにリダイレクトされ使用されます。受信したヘッダーを印刷するフラグがあること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
それともこれを行う他の方法/コマンドはありますか?
答え1
必要なものは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のローカル部分である括弧内に一致する式を印刷します。