監視したいネット経由で提供されているディレクトリがあります。その内容は、私が使用しているソフトウェアのさまざまなバージョンであり、そこにあるものをチェックし、すでに入手したものより新しいものをダウンロードする実行可能なスクリプトを書きたいと思います。
ディレクトリ一覧を取得する方法はありますか。たとえば、wget
などを使用してください。私はhtmlを与えるディレクトリでwget
を使用しようとしました。 HTMLドキュメントを解析する必要をなくすために、ls
のような単純なリストを取得する方法はありますか?
私はそれを行う方法を見つけました:
$ 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/)
HTTPではなくFTPを使用して最善のサービスを提供することを求めています。
HTTPにはディレクトリリストの概念がありませんが、FTPにはあります。
ほとんどのHTTPサーバーは、ディレクトリリストへのアクセスを許可していません。アクセスを許可しているサーバーは、HTTPプロトコルではなく、サーバーの機能として許可しています。それらのHTTPサーバーの場合、それらはマシンの消費ではなく人間の消費のHTMLページを生成して送信することを決定しています。これを制御することはできず、HTMLを解析する以外に選択肢はありません。
FTPはマシンの消費を考慮して設計されており、あいまいなMLST
コマンドに代わるMLSD
およびLIST
コマンドが導入されています。
以下は再帰的ではありませんが、私にとってはうまくいきました:
$ curl -s https://www.kernel.org/pub/software/scm/git/
出力はHTMLで、stdout
に書き込まれます。 wget
とは異なり、ディスクには何も書き込まれません。
-s
(--silent
)は、出力をパイプする場合、特にノイズを含んでいてはならないスクリプト内で重要です。
可能な限り、ftp
の代わりにhttp
またはhttps
を使用しないようにしてください。
Httpで提供されている場合、単純なディレクトリリストを取得する方法はありません。そこで閲覧したときに表示されるリスト(wgetが取得しているもの)は、WebサーバーによってHTMLページとして生成されます。そのページを解析して情報を抽出するだけです。
IDM(インターネットダウンロードマネージャー)を使用できます。
「IDM SITE GRABBER」という名前のユーティリティにhttp/https
URLを入力すると、http/https
プロトコルからすべてのファイルとフォルダがダウンロードされます。
私の知る限り、セキュリティの目的でそのようなディレクトリ一覧を取得する方法はありません。ターゲットディレクトリにHTMLリストが含まれていることは、幸運なことに、パースして新しいダウンロードを見つけることができるためです。