wgetコマンドの精度と取得階層数について

このQ&Aのポイント
  • wgetコマンドを使用してWEBサイトのデータを取得する際、取得階層数のデフォルトが影響することがあります。
  • 例えば、取得階層数のデフォルトが5の場合、wgetコマンドで取得した際に下位階層のファイルやフォルダが取れない場合があります。
  • 取得階層数のデフォルトを増やすことで、完全なデータの取得が可能になる場合があります。ただし、取得階層数を増やすことで取得にかかる時間も増えるため、注意が必要です。
回答を見る
  • ベストアンサー

wgetコマンドの精度と取得階層数

centos5 wgetコマンドを使って、WEBサイトのデータを丸ごと取得しました。 $ wget -r ftp://ftp.xxxxxx.co.jp/ ところが、下位階層のファイルやフォルダが取れていない事に気付きました。 ftpルート +-www   +-htdocs     +-content1     | +-file     | | +-image     | | | +-image1.png     | | +-css     | |   +-css1.css     | +-content1-1     | | +-file     | | | +-image     | | | | +-image1.png     | | | +-css     | | |   +-css1.css     | | +-index.html     | +-index.html     +-content2     +-image     | +-image1.png     +-css     | +-css1.css     +-js     | +-js1.css     +-index.html $ wget -r ftp://ftp.xxxxxx.co.jp/ で取得すると、下位階層のファイルが取得できていませんでした。 上記の例で言うと www/htdocs/content1/content1-1/file までは取れていて、 www/htdocs/content1/content1-1/fileの中身が空っぽです。 $ wget -r ftp://ftp.xxxxxx.co.jp/www や $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs で取得しても状況は変わらず。 $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/content1 まで指定すると、 www/htdocs/content1/content1-1/file/image www/htdocs/content1/content1-1/file/css と、その中のファイルまで取得できました。 これは、どういう事? wget自体が、単に調子悪いとドンドン取りこぼしていく信頼のおけない機能なのか? 取得階層数のデフォルトが5になっていて、それ以上は明示的に指定が必要なのか? 試しに $ wget -r -l 99 ftp://ftp.xxxxxx.co.jp/www/htdocs/content1 で99階層を指定してみると、最後までキッチリ取れました。 やっぱり、取得階層数のデフォルトが5なのか? それとも、通信が、たまたま調子良いか悪いかだけなのか? 取得階層数のデフォルトが5だとすれば、 $ wget -r ftp://ftp.xxxxxx.co.jp/ の時と $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/ の時がダメで $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/content1 の時が取れる意味が分からない。 謎です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>やっぱり、取得階層数のデフォルトが5なのか? そうですね 設定ファイルはwgetrcを利用すればいいでしょう。 reclevel = 5 を変更してください また本当に不調が原因であれば tries = 20 waitretry = 10 の値を少しあげてみるのも手かもしれません。

webuser
質問者

お礼

ありがとうございます。 簡潔でありながら詳しい説明に感謝です。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

UnixやLinuxのコマンドなら 「manコマンドでマニュアルを読む」 くらいのことはやってから、人に聞きましょう。 今回のも、最初からそうしていれば、こんなに長々と文章書かずに済んだのです。 man wget より > -r > --recursive > Turn on recursive retrieving. The default maximum depth is 5. と、ちゃんと「デフォルトでは5階層まで」と書いてあります。 また、manで見るべきところは「SEE ALSO」だと言われています。 SEE ALSOにはこうあります。 > This is not the complete manual for GNU Wget. > For more complete information,(略) see the GNU Info entry for wget. 「これは完全なマニュアルではないので、より詳しくは GNU infoのwgetを読め」 Googleで検索したら、日本語訳がありました。 http://www.bookshelf.jp/texi/wget/wget-ja_3.html#SEC13 > FTP URLを再帰的に回収するとき,Wgetはリモートサーバの 『与えられたディレクトリツリーから』 > 全てのデータを回収し,ローカルにミラーイメージを作成します. > FTPの 回収もdepthパラメータで制限されます. と、あなたの疑問が全て載っています。

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.2

>やっぱり、取得階層数のデフォルトが5なのか? そうです。man wget の -l の所にそう書いてあります。 また、無制限は -l 0 です。これは、wget --help に書いてあります(man にないのは謎)。 >の時が取れる意味が分からない。 指定したところからの階層数です。これはmanには書いてないですが、常識的な判断で。 通信がたまたま調子悪いのであれば、エラーになります。

webuser
質問者

お礼

ありがとうございます。 >指定したところからの階層数です。 $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/ と、指定階層を下げてみてもダメだったので、ftpルートからなのか? と思いきや、 $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/content1 まで下げてみると、最後まで取れたので疑問なんです。 今、新ためて $ wget -r ftp://ftp.xxxxxx.co.jp/www/htdocs/ してみると、 ちゃんと取れていたので、やっぱり意味が分かりません。 この前は通信が激重だったので。。 そもそも、wget を使おうと思ったのが、filezillaなどのguiツールが途中で通信切れてしまうぐらい重くて、ダウンロードできないから、「コマンドなら幾分軽いかな?」と試したという背景があるのですが、何かそこら辺が絡んでるのかも。。。

関連するQ&A

  • wgetでのダウンロードについて

    wgetでのダウンロードについて はじめまして。 HPのバックアップを取ろうと思い、wgetというものを使おうと思うのですが 取得できる物と、できない物があり、何故かがわからずに困っているので 理由、もしくは解決方法を御存じの方がいらっしゃいましたら、是非お教え下さい。 パソコンは、windows xpです。 (例) www.hoge.co.jp   L css(フォルダ)  L photo(フォルダ)  L image(フォルダ) index.html aaaaa.html という様な構造なのですが、cssフォルダの中の いくつかのファイルしか取得できませんでした。 (同じ様なスタイルシートで、拡張子は全て.cssです。) コマンドプロンプトで wget -r www.hoge.co.jp -P C:\wget という感じで実行しています。 全部DLできない訳ではないので、余計に悩んでいます。 みなさま、よろしくお願いします。

  • wgetのコマンドでは不可能?

    はじめまして、こんにちは。 wgetでpdfをダウンロードしようと試しているのですが、上手くいかず困っている為質問させて頂きます。「ttp://www.***.jp」というサイトの中の「/yuho/」より下のディレクトリにあるpdfファイルをダウンロードしようとしています。 ttp://www.***.jp ↓ ttp://www.***.jp/list/s1000.htm (s1000はs2000,s3000,,,s9000まである) ↓ ttp://www.***.jp/code/1301.htm (1301は1000,1001,,,9999まである) ↓ ttp://www.***.jp/yuho/1301.htm (1301は1000,1001,,,9999まである) ↓ ttp://www.***.jp/mark/20141114/S1003FL5.htm (20141114とS1003FL5はそれぞれ変動、このページにpdfファイルへのリンクがある) 上記の様にリンクが繋がっていて、 ディレクトリ「list」「code」「yuho」「mark」を取得対象とすれば良いのだろうと考え、wgetで -I オプションでディレクトリを list/,code/,yuho/,mark/と指定してみたのですが、上手く働きませんでした。 これはやはり階層構造になっていない為でしょうか? 余計なページのpdfをダウンロードせず、ディレクトリ「yuho」以下の階層にあるpdfをダウンロードする場合はどのようなwgetのコードを書けば良いのでしょうか? wgetでは不可能なのでしょうか? Irvineというダウンローダーで ttp://www.***.jp/yuho/1301.htm の「1301」の部分を1000から9999にして、ダウンロードする拡張子をpdfに指定、階層を2にして実行しましたがこれも失敗でした。 現在も色々調べておりますが、知恵が足りず大変困っております。 こういった分野に造詣が深い方がいらっしゃいましたら、どうかご教授下さい。 宜しくお願い致します。

  • wget でのファイル取得

    FTPサーバから、ファイルを取ってこなければならなくなったのですが、サーバ上のファイル名に「日本語」がついています。 Windows の FFFTP では、普通に日本語のファイル名が表示されています。サーバはWindowsのようです。 [xxxxx@xxxxxx Aug]$ ftp ftp.foo.co.jp Connected to ftp.foo.co.jp. 220 Microsoft FTP Service <SNIP!> Name (ftp.foo.co.jp:username): username 331 Password required for username. Password: 230 User username logged in. Remote system type is Windows_NT. ftp> というような表示です。 で、ダウンロードするファイルが多い(10GBのオーダー)なので、wgetで一気に取得しようとしたのですが、うまく取得できません。 ダウンロードするホストのOSはCentOSで日本語が表示されている(LANG=ja_JP.UTF-8)状態です。 ここで wget --no-passive-ftp -nH -np -r ftp://username:password@ftp.foo.co.jp/ と実行すると、index.htmlが生成され、ファイルはダウンロードされません。ファイルはそのまま見ると文字化けするのですが、lvでUTF8に変換するとディレクトリ名などが正常に確認できます。 なぜ、ファイルがダウンロードされないのでしょうか?

  • wgetのヴァージョン?

    最近連続でお世話になっております(汗。。) 二以上のURLを指定したファイルを指定しwgetで取得しています。 url.csvには以下のようにurlが改行で記述されています。 ttp://aaa.jp/ ttp://bbb.jp/ ttp://ccc.jp/ 以下のコマンドで成功します。 オプションは(index.htmlを省いたhtmlファイルだけを取得) wget -nc -r -A html -R index.html -i url.csv しかし、違うそれもスペックが高い(cpu、メモリ、しかもデュアルコア)サーバで実行すると1件目はオプション通りにファイル群を取得しますが、2件目以降のurlはindex.htmlだけを取得してしまいます。 ちなみに、wgetのヴァージョンは成功するほうが1.8.2で失敗するほうが1.10.2です(後者のほうがヴァージョンも高いですよね) 何かお気づきの方がいればご教授下さい。

  • wgetで指定したURLの背景画像等の取得方法

    wgetを使ってファイルの階層構造を保ったまま、 指定したURLの関連ファイルだけ保存したいのですが CSSで指定された背景画像、JSでリンクされてるロールオーバーなどの画像を取得するには コマンドはどう記述したら良いのでしょうか? 保存したいのは、あくまで指定したURLを正常に表示する為に使用されてる関連ファイルだけです。 ちなみにFLASH等で外部ファイル化してるjsや画像も取得できる方法があれば教えていただけますでしょうか。

  • wgetのオプション

    いつもお世話になります。 wgetを使ってサイトの取得を色々試しています。 例:あるブログを取得。ブログは毎日更新されている。 昨日wgetでブログを取得。今日もブログを取得した場合、更新又は新規ファイルだけを取得したい。 条件で言えば『取得済みのファイルは取得しないが、タイムスタンプが変更している場合は取得する。勿論新規ファイルも取得』 オプションの-nc(取得済みファイルは取得しない)、-N(タイムスタンプを見る)を同時に指定すると以下のエラーが出ます。 「-Nと-ncとを同時には指定できません。」 何か方法はないのでしょうか? 宜しくお願いします。

  • FTPサーバ(IIS)のファイルをwgetで取得することができません。

    FTPサーバ(IIS)のファイルをwgetで取得することができません。 ※IISの既定のFTPサイト(通常C:\Inetpub\ftproot)直下にftpuser1 というフォルダを作成しておくと、このFTPサイトに ftpuser1でログオンした際、 カレント・フォルダが「/ftpuser1」となります。 1.DOS窓から次のコマンドを入力します。 d:\wget\wget.exe ftp://○.○.○.○/ftpuser1/test.txt --debug --append-output=d:\wget\log.txt --tries=3 --wait=60 --directory-prefix=d:\wget\test --ftp-user=ftpuser1 --ftp-password=ftpuser1 2.失敗したのでログを確認します。 「ftp://○.○.○.○/ftpuser1/」にあるファイルを取得したいのですが、 「ftp://○.○.○.○/ftpuser1/ftpuser1/」を参照しに行ってました。 ↓ログ Logging in as ftpuser1 ... 220 Microsoft FTP Service --> USER ftpuser1 331 Password required for ftpuser1. --> PASS ftpuser1 230 User ftpuser1 logged in. Logged in! ==> SYST ... --> SYST 215 Windows_NT done. ==> PWD ... --> PWD 257 "/ftpuser1" is current directory. done. ==> TYPE I ... --> TYPE I 200 Type set to I. done. changing working directory Prepended initial PWD to relative path: pwd: '/ftpuser1' old: 'ftpuser1' new: '/ftpuser1/ftpuser1' ==> CWD /ftpuser1/ftpuser1 ... --> CWD /ftpuser1/ftpuser1 550 /ftpuser1/ftpuser1: The system cannot find the file specified. No such directory `ftpuser1'. Closed fd 908 ちなみにフォルダ「ftp://○.○.○.○/ftpuser1/ftpuser1/」を作成したところ、 ファイルは取得できました。 なぜ「ftp://○.○.○.○/ftpuser1/ftpuser1/」を参照しに行くのか分かりません。 原因等分かりましたらご教授お願いします。 環境 ・接続先FTPサーバ  Windows Server 2003 R2  IIS 6.0 ・接続元  Windows 2000  wget 1.11.4

  • ◆wgetをcronで動かす場合

    いつもお世話になっています(何回目だろう。。。) wgetの挙動についてです。 オプションとしてhtmlファイルを全て取得しています。1件目は成功しますが、2件名以降はindex.htmlしか取得しません。 そこで、 export LANG=C export LC_ALL=C を追加することで、全件がオプション通りに取得できました。 --------------get_url.sh--------------ここから--------- #!/bin/bash export LANG=C export LC_ALL=C wget -nc -r -A html http://aaa.hoge.jp/ wget -nc -r -A html http://bbb.hoge.jp/ wget -nc -r -A html http://ccc.hoge.jp/ --------------get_url.sh--------------ここまで--------- しかし、これをcronで実行させた場合、再び2件目以降はinde.htmlだけしか取得しません。 どなたかお気づきの点があればご教授下さい。 ちなみに、crontag -eは以下です。 52 12 * * * /get_url.sh

  • wgetで指定したファイルだけダウンロードするには?

    wgetのファイル収集ツールで 指定したファイルだけをダウンロードする方法はどうしたら良いのでしょうか? イメージとしてはこのサイトの http://shupla.w-jp.net/items/wget.html 『3.使い方』 を応用したいのですが、 余計なファイル、ディレクトまでダウンロードしていまい上手くいかないのです。 例えばテキストファイルに http://www.yahoo.co.jp/index.html http://k.yimg.jp/images/top/sp/logo.gif http://k.yimg.jp/images/sh/recommend/84_84_0053.gif こんな感じで書いて、この“3ファイルだけ”を差分ファイルとしてダウンロードしたい場合です。 ちなみに仕様してるOSはWindowsXPです。 ご教示いただきたくお願いいたします。

  • NFSサーバーのファイルを取得する

    今、RedHat9でNFSサーバーを立ち上げました。 /etc/exportsにアクセスできるディレクトリ指定をしました。 テストのため、クライアントを同一PCとしています。 取得したいファイルを得る場合はどのようにしたらいいのでしょうか? wgetコマンドを用いてサーバーのアドレスを指定して取得したいファイルを指定する? (/etc/exports) /home/user1 クライアント側のIPアドレス(rw) 取得したいファイルがもし、 /home/user1/sample/get_1.txt の場合、 wget ftp://NFSサーバーIPアドレス/取得したいファイルのディレクトリパス 格納先 どのようにして取得したいファイルおよび格納先していを行うのかわかりません。 よろしくお願い致します。