ネットスケープから ftp サイトに入ると、ファイルの一覧が出てきます。この一覧を保存しておいて後でゆっくり見ようとしても、この一覧はネットスケープから保存できません。ftp サイトの一覧を HTML ファイルで保存するには、wget コマンドを使います。たとえばthemes.org にある Window Maker のテーマ一覧を見たい時は、
wget ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wmとします。すると、次のように /pub/mirrors/themes.org/wm のファイルリストを含んだ index.html が作成されます。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>/pub/mirrors/themes.org/wm (download.sourceforge.net:21 上)の見出し(index)です</title> </head> <body> <h1>/pub/mirrors/themes.org/wm (download.sourceforge.net:21 上)の見出し(index)です</h1> <hr> <pre> 2000 Mar 01 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/-0.60.0.tar.gz">-0.60.0.tar.gz</a> (143,517 バイト) 2000 Jan 19 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.51.2.tar.gz">0Gengar v1.0-0.51.2.tar.gz</a> (42,952 バイト) 2000 Jan 19 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.52.0.tar.gz">0Gengar v1.0-0.52.0.tar.gz</a> (42,952 バイト) 2000 Jan 19 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.53.0.tar.gz">0Gengar v1.0-0.53.0.tar.gz</a> (42,952 バイト) 2000 Jan 19 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/0Gengar v1.0-0.60.0.tar.gz">0Gengar v1.0-0.60.0.tar.gz</a> (42,952 バイト) 2000 Oct 10 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/10 Jahre-0.60.0.tar.gz">10 Jahre-0.60.0.tar.gz</a> (394,998 バイト) 1999 Nov 28 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1136-0.52.tar.gz">1136-0.52.tar.gz</a> (463,486 バイト) 1999 Nov 28 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/12Monkeys-0.52.tar.gz">12Monkeys-0.52.tar.gz</a> (57,316 バイト) 2001 Feb 08 12:31 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/17C3-0.60.0.tar.gz">17C3-0.60.0.tar.gz</a> (29,919 バイト) 1999 Nov 28 ファイル <a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1900-0.52.tar.gz">1900-0.52.tar.gz</a> (262,554 バイト) 以下略ネットスケープで index.html を表示して、欲しいファイルがあれば、画面でクリックしてダウンロードすればいいのですが、wget を使って一括ダウンロードするために、URL 部分だけを取りだすプログラムを作りました。
URL は a href="ftp://download.sourceforge.net:21/pub/mirrors/themes.org/wm/1136-0.52.tar.gz" というふうにクォーテーションマーク(") の中に入っていますから、その中だけ取りだすプログラムを作ればいいので、簡単です。
while(fgets(buf, 400, inp)!=NULL){ for(i=0; buf[i]!='"'; i++) ; for(i=i+1; buf[i]!='"'; i++){ if(buf[i]==' ') fputs("%20", out); else putc(buf[i], out); } putc('\n', out); }ここでは index.html を1行づつ読んでいって " までの文字は飛ばし、次に " が出てくるまでの文字をファイルに書き込んでいます。ただし、ファイル名にスペースが含まれている部分は %20 で置き換えて wget の誤動作を防いでいます。
以下は ulist.c の全体です。これを使って得たファイルを list.txt とするなら、wget -i list.txt とすることによって list.txt にあるファイルを片っ端からダウンロードすることができます。ただし、Window Maker の テーマは全部で 3300 個もありますから、まさか全部をダウンロードしようとはしないでくださいね。
/* ulist.c */ #include <stdio.h> main(int argc, char *argv[]) { FILE *inp, *out; char buf[400], inpfile[40], outfile[40]; int i, end; if(argc<2){ printf("Input filename.\n"); exit(0); } strcpy(inpfile, argv[1]); sprintf(outfile, "%s.out", argv[1]); if((inp=fopen(inpfile, "r"))==NULL){ printf("\nCan't open <%s>\n", inpfile); exit(0); } if((out=fopen(outfile, "w"))==NULL){ printf("\nCan't creat <%s>\n", outfile); exit(0); } koprintf("\n<%s> was created.\n", outfile); }