リモートにあるftpサーバのファイルをリスト化する方法を教えてください。

例えば、以下のサーバのディレクトリ配下のファイルリストです。
ftp://ftp.ne.jp/040/X11/GNOME/binaries/win32/
ファイル名、パス名、ファイルサイズ、更新日時をTXT、CSV、HTMLいずれか
の形式で出力できればいいです。
指定したカレントディレクトリだけでなくサブディレクトリも含めた
リストが欲しいです。
ローカルマシンのファイルリストを作成する以下のようなフリーソフトを
紹介するのはご遠慮下さい。
http://www.vector.co.jp/vpack/filearea/win/util/file/list/
FTPクライアントでローカルにミラーリングダウンロードしてから、
リスト化という方法も不可です。
以下の質問は確認していますが、解決できませんでした。
http://q.hatena.ne.jp/1123655383

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/08 22:21:09
  • 終了:2010/04/12 01:20:45

回答(4件)

id:cno No.1

cno回答回数124ベストアンサー獲得回数122010/04/08 23:02:06

ポイント30pt

コマンドプロンプトから以下のような流れでどうでしょう?


ftp

open 接続するサーバ

ユーザ名

パスワード

dir -R

bye


こちらのページが参考になると思います。

http://www.ponko2.com/ftp_bat.html

id:kemeko0809

回答ありがとうございます。ほぼ欲しいリストと等しいです。

不要な情報はテキストエディタで一括削除することにします。

ただ、パス名が別の行になっているのが惜しいです。

パス名もファイル名やファイルサイズと同じ行に出力されるとありがたいです。

(EXCELで処理しやすいため)

よい方法はございますでしょうか?

2010/04/09 01:30:15
id:chyopper No.2

chyopper回答回数416ベストアンサー獲得回数692010/04/08 23:06:55

ポイント50pt

ディレクトリ&ファイルリスト作成プログラム for FTP

http://www.vector.co.jp/soft/win95/net/se297135.html

ディレクトリツリーリストと対応したファイルリスト作成してくれます。

id:kemeko0809

これいいですね!

質問に示したサーバに対してはこのソフトで問題なしです。

ただ、本当に取得したいのは別のサーバで、もっとディレクトリ数やファイル数が

多いのです。2時間以上処理していますが、全く終わる気配がないです。

このソフトはEXCELのシートに出力するので、EXCELの制限に引っかかっているのかも

しれません。もっと処理スピードが早い、あるいはEXCELを使わないソフトがあれば

教えていただきたいです。

2010/04/09 01:39:04
id:pyopyopyo No.3

pyopyopyo回答回数357ベストアンサー獲得回数882010/04/08 23:49:51

ポイント20pt

以下のテキストを get.bat という名前で保存します。

あとは get.bat をダブルクリックで実行するだけです。

list.txt という名前で、ファイルのリストが生成されます。

echo open ftp.ne.jp > cmd.txt
echo cd /040/X11/GNOME/binaries/win32/ >> cmd.txt
echo ls -R >> cmd.txt
echo bye >> cmd.txt

ftp -A -d -s:cmd.txt   >  list.txt
id:kemeko0809

回答ありがとうございます。ほぼ欲しいリストと等しいです。

不要な情報はテキストエディタで一括削除することにします。

ただ、パス名が別の行になっているのが惜しいです。

パス名もファイル名やファイルサイズと同じ行に出力されるとありがたいです。

(EXCELで処理しやすいため)

よい方法はございますでしょうか?

2010/04/09 01:32:05
id:cno No.4

cno回答回数124ベストアンサー獲得回数122010/04/10 00:00:08

ポイント100pt

1で回答させていただいた者です。


即席でプログラムを作成してみましたので宜しければ

お試しください。

http://cabbage.s201.xrea.com/myprogram/archive/dirr.lzh


実行するために以下の条件が必要です。

Java5以上がインストールされていること。

java.exeのパスが通っていること。


アーカイブを解凍後、フォルダ内のdirr.batを実行してみて下さい。


大変汚いソースで恐縮ですがアーカイブに添付させていただいてます。


お役に立てますと幸いです。

id:kemeko0809

わざわざプログラムまで作っていただきまして本当にありがとうございます。

Java6をインストールしてjava.exeのパスが通っていることを確認したのですが、

2点うまくいかない部分がありますのでコメントで補足して頂ければ幸いです。

 

1.タイムスタンプが「java.util.GregorianCalendar[time=1261580400000・・・」のようになってしまう

2.ディレクトリ名やファイル名に2バイト文字を含む場合に文字化けする

2010/04/10 01:58:51
  • id:GreenStar
    間接回答拒否で回答できないけど方法を1つ!

    コンソール/コマンドプロンプトからコマンドを使ってリストを得る!
    http://www.atmarkit.co.jp/fnetwork/rensai/netpro11/netpro01.html
    (「過去からの贈り物」って、私らは遺物かw)
  • id:rouge_2008
    もうほとんど解決していると思いますので、コメントで失礼します。
    lsコマンドだとファイル名しか取得されないので、代わりにdirコマンドを使用すると良さそうです。

    C:\XXX>ftp -A ftp.ne.jp
    ftp> cd 040/X11/GNOME/binaries/win32
    ftp> dir -R ftp.ne.jp-xxx.txt

    ※コマンドプロンプトで「>」の右側だけ入力します。
    ※出力先は「C:\XXX\~.txt」のように指定する事も可能です。

    http://www.atmarkit.co.jp/fwin2k/win2ktips/762ftpdirt/ftpdirt.html


  • id:kemeko0809
    コメントありがとうございます。ほぼ欲しいリストと等しいです。
    不要な情報はテキストエディタで一括削除することにします。
    ただ、パス名が別の行になっているのが惜しいです。
    パス名もファイル名やファイルサイズと同じ行に出力されるとありがたいです。
    (EXCELで処理しやすいため)
    よい方法はございますでしょうか?
  • id:kemeko0809
    2番目の回答で示されたソフトで処理したところ、
    ディレクトリ数、ファイル数が多い場合に処理途中で終了
    してしまうことがわかりました。
    また、コマンドプロンプトからテキストにリダイレクトする方法は
    パスが別の行になってしまうので完璧ではありません。
    追加の回答をお待ちしています。
  • id:kemeko0809
    コマンドプロンプトからテキストにリダイレクトする方法は
    一部のFTPサーバではDIR -Rしてもカレントディレクトリしか
    リスト化できないようです。
  • id:cno
    4で回答させていただいたものです。ご指摘事項を修正してみました。
    ftp.ne.jpにアクセスしすぎたためか接続に弾かれるようになってしまったため、
    別環境で確認しました。

    度々お手数ですがご確認いただけると幸いです。

    http://cabbage.s201.xrea.com/myprogram/archive/dirr2.lzh


  • id:kemeko0809
    何度もありがとうございます。
    出力内容については完璧です。(不要な項目はEXCELで削除します)
    ただ、ファイル数が多いリストを作成しようとすると、
    最大で3万5千行から3万6千行くらい(約10MB)出力したところから毎回処理が
    進まなくなってしまいます。同じ行で止まるというわけではないです。
    java.net.SocketException: Connection resetのエラーが出力
    される場合(この場合は出力行が少ない)と、エラーは出力されずに処理が
    停止する場合(この場合は3万5千から3万6千行の出力)があります。
    ちょっとがんばってJavaのソースを見ましたが、原因はわかりません
    でした。お手数をおかけしますが、もう少しお力をお貸し頂けますと
    幸いです。
  • id:cno
    kemeko0809様

    逆にお手間をとらせてしまってなんだか申し訳ないです。
    教えていただいたエラーの内容としては、「サーバ側から切断された」
    というメッセージだったので、以下の流れが原因であると想定します。

    最初に指定したフォルダから、直下の一覧を取り出し、一つづつフォルダかどうかチェック。
    →フォルダを見つける度にそのフォルダの中身の一覧を取り出す
    →1つづつ中身をチェックし、フォルダだったらその中身の一覧を取り出す
    →・・・繰り返し
    これにより短時間での大量リクエストが発生して
    サーバから切断されてしまった。

    「dir -r」コマンドだと1つのリクエストで済んでいたため
    このようなことはなかったのですが、おそらく2の回答者様が紹介された
    ソフトでも同じ理由で途中で止まってしまったのではないかと思います。

    もし、接続先のFTPサーバの設定を変えることができるのであれば、
    制限を緩めることで動作できるのではと考えています。

    よろしくお願いします。

  • id:kemeko0809
    解説ありがとうございます。
    ようやくうまくいかない理由がわかりました。
    FTPサーバの管理者とは知り合いなのですが、
    リスト取得のためだけに設定変更をお願いするのは
    申し訳ないので、取得したいディレクトリにあるサブディレクトリ
    から処理することにして、サブディレクトリの数だけ処理し
    リストを結合することで対処したいと思います。
  • id:cno
    回避策が見つかり良かったです。
    2の回答者様紹介のソフトで対応できそうですね。

    良い勉強をさせていただきました。

    即席プログラムのテストをさせてしまったみたいで
    申し訳ありませんでした。
  • id:kemeko0809
    こちらこそいい勉強になりました。
    ありがとうございました。
    回答やコメント、私が試した結果を簡単にまとめておきます。
     
    1.一般的にはdir -Rやls -laFRの結果をテキストにリダイレクトすればよい
    2.パスが別の行になるのが好ましくない場合は2番目の回答のソフトやコメントの
     プログラムを使う
    3.dir -Rやls -laFRでもカレントディレクトリのリストしか出力しないサーバ
     がある(BulletProofなど)
    4.短時間で大量のリクエストをサーバに送るとサーバから切断されたり、
     サーバが応答しなくなったりすることがある(その後しばらくアクセス拒否される
     こともある)
    5.取得したいディレクトリのサブディレクトリからリスト取得し、
     サブディレクトリの数だけ繰り返し、最後にリストを結合することで、
     上記4の状況を回避できる
     
    上記4の状況を回避するために、「ある行数分出力、あるいはある回数分リクエストしたら
    何分間か待った後で処理再開」というようなことができれば便利かもと思いました。
    ニッチすぎる希望かもしれませんが…。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません