かえでBlog

色々なことを徒然と……

wgetでファイル名の取得に失敗する場合とその対処

   

wgetでファイルをダウンロードする場合、Windowsではうまくファイル名でダウンロードしてくれるのにLinuxのwgetコマンドでダウンロードを行うとファイル名がおかしい状態でダウンロードされる場合がたまにありました。

例えばPHPの場合Chrome(Windows)でダウンロードした場合は正しくファイル名が表示されます。
php download

しかし、wgetで同じリンク先のファイルをダウンロードするとmirrorというファイル名で保存されます。

  [root@test php]# wget http://jp2.php.net/get/php-7.0.7.tar.gz/from/this/mirror
  --2016-06-05 20:27:28--  http://jp2.php.net/get/php-7.0.7.tar.gz/from/this/mirror
  jp2.php.net (jp2.php.net) をDNSに問いあわせています... 49.212.134.217
  jp2.php.net (jp2.php.net)|49.212.134.217|:80 に接続しています... 接続しました。
  HTTP による接続要求を送信しました、応答を待っています... 302 Found
  場所: http://jp2.php.net/distributions/php-7.0.7.tar.gz [続く]
  --2016-06-05 20:27:28--  http://jp2.php.net/distributions/php-7.0.7.tar.gz
  jp2.php.net:80 への接続を再利用します。
  HTTP による接続要求を送信しました、応答を待っています... 200 OK
  長さ: 18218591 (17M) [application/x-gzip]
  `mirror' に保存中
  
  100%[======================================>] 18,218,591  5.33MB/s 時間 3.5s
  
  2016-06-05 20:27:32 (4.90 MB/s) - `mirror' へ保存完了 [18218591/18218591]
  
  [root@test php]# ll
  合計 17792
  -rw-r--r--. 1 root root 18218591  5月 25 22:31 mirror

理由はwgetの場合、最初に指定したリンクパスでファイル名を決定し、リダイレクト処理が行われてもファイル名を変更しないという仕様上のためだそうです。
今回の場合、wgetで指定したURLの末尾がmirrorのためmirrorがファイル名で決定され、リダイレクト後のファイル名がphp-7.0.7.tar.gzでもファイル名の変更はされないのでmirrorのまま保存されてしまうんですね。
mirrorだけなら文字数が少ないですが、sourceforgeになるとURLパスも入ってくるのでファイル名がかなり長くなってしまう場合もあります。

-Oオプションでファイル名を指定するかダウンロード後にmvコマンドでファイル名に変更という作業を行ってもいいですが、「--trust-server-names」オプションを付与すればリダイレクトされたファイル名で保存することができます。

[root@root php]# wget --trust-server-name http://jp2.php.net/get/php-7.0.7.tar.gz/from/this/mirror
--2016-06-05 20:42:46--  http://jp2.php.net/get/php-7.0.7.tar.gz/from/this/mirror
jp2.php.net (jp2.php.net) をDNSに問いあわせています... 49.212.134.217
jp2.php.net (jp2.php.net)|49.212.134.217|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://jp2.php.net/distributions/php-7.0.7.tar.gz [続く]
--2016-06-05 20:42:46--  http://jp2.php.net/distributions/php-7.0.7.tar.gz
jp2.php.net:80 への接続を再利用します。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 18218591 (17M) [application/x-gzip]
`php-7.0.7.tar.gz' に保存中

100%[======================================>] 18,218,591  3.19MB/s 時間 7.1s

2016-06-05 20:42:53 (2.45 MB/s) - `php-7.0.7.tar.gz' へ保存完了 [18218591/18218591]

[root@root php]# ll
合計 17792
-rw-r--r--. 1 root root 18218591  5月 25 22:31 php-7.0.7.tar.gz

これでダウンロードした後にファイルがない!と一瞬焦ることはなくなりそうです。

 

 - サーバー, ツール , , ,