サーバー ツール

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

2016年6月5日

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の末尾がファイル名となるため、「http://jp2.php.net/get/php-7.0.7.tar.gz/from/this/mirror」のリダイレクト処理後の「 php-7.0.7.tar.gz 」ではなく、「mirror」という名前で保存されるようです。
mirrorだけなら文字数が少ないですが、sourceforgeになるとURLパスも入ってくるのでファイル名がかなり長くなってしまう場合もあります。

-Oオプションを使うとファイル名を指定して保存することができますが、毎回ファイル名を指定するのはめんどくさい・・・
リダイレクト先のファイル名で保存できないかオプションを確認してみたところ、「--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

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

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