web-dev-qa-db-ja.com

http経由でディレクトリ一覧を取得する

監視したいネット経由で提供されているディレクトリがあります。その内容は、私が使用しているソフトウェアのさまざまなバージョンであり、そこにあるものをチェックし、すでに入手したものより新しいものをダウンロードする実行可能なスクリプトを書きたいと思います。

ディレクトリ一覧を取得する方法はありますか。たとえば、wgetなどを使用してください。私はhtmlを与えるディレクトリでwgetを使用しようとしました。 HTMLドキュメントを解析する必要をなくすために、lsのような単純なリストを取得する方法はありますか?

17
ajwood

私はそれを行う方法を見つけました:

$ wget --spider -r --no-parent http://some.served.dir.ca/

それはかなり冗長なので、あなたが何をしているかに応じてgrepを数回パイプする必要がありますが、情報はすべてそこにあります。 stderrに出力するように見えるので、2>&1を追加してgrepをそこに追加します。 「\ .tar\.gz」を検索して、サイトが提供する必要があるすべてのtarballを見つけました。

wgetは、作業ディレクトリに一時ファイルを書き込み、その一時ディレクトリをクリーンアップしないことに注意してください。これが問題の場合は、一時ディレクトリに変更できます。

$ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
27
ajwood

HTTPではなくFTPを使用して最善のサービスを提供することを求めています。

HTTPにはディレクトリリストの概念がありませんが、FTPにはあります。

ほとんどのHTTPサーバーは、ディレクトリリストへのアクセスを許可していません。アクセスを許可しているサーバーは、HTTPプロトコルではなく、サーバーの機能として許可しています。それらのHTTPサーバーの場合、それらはマシンの消費ではなく人間の消費のHTMLページを生成して送信することを決定しています。これを制御することはできず、HTMLを解析する以外に選択肢はありません。

FTPはマシンの消費を考慮して設計されており、あいまいなMLSTコマンドに代わるMLSDおよびLISTコマンドが導入されています。

4
Remy Lebeau

以下は再帰的ではありませんが、私にとってはうまくいきました:

$ curl -s https://www.kernel.org/pub/software/scm/git/

出力はHTMLで、stdoutに書き込まれます。 wgetとは異なり、ディスクには何も書き込まれません。

-s--silent)は、出力をパイプする場合、特にノイズを含んでいてはならないスクリプト内で重要です。

可能な限り、ftpの代わりにhttpまたはhttpsを使用しないようにしてください。

2
Acumenus

Httpで提供されている場合、単純なディレクトリリストを取得する方法はありません。そこで閲覧したときに表示されるリスト(wgetが取得しているもの)は、WebサーバーによってHTMLページとして生成されます。そのページを解析して情報を抽出するだけです。

1
Optimal Cynic

IDM(インターネットダウンロードマネージャー)を使用できます。
「IDM SITE GRABBER」という名前のユーティリティにhttp/https URLを入力すると、http/httpsプロトコルからすべてのファイルとフォルダがダウンロードされます。

0
babak

私の知る限り、セキュリティの目的でそのようなディレクトリ一覧を取得する方法はありません。ターゲットディレクトリにHTMLリストが含まれていることは、幸運なことに、パースして新しいダウンロードを見つけることができるためです。

0
Samuel