Получение списка каталогов по http

Существует каталог, который обслуживается через сеть, который я заинтересован в мониторинге. Его содержимым являются различные версии программного обеспечения, которое я использую, и я хотел бы написать сценарий, который я мог бы запустить, который проверяет, что там есть, и загружает все, что новее, чем то, что у меня уже есть.

Есть ли способ, скажем, с wget или что-то, чтобы получить список каталогов. Я попытался использовать wget в каталоге, который дает мне HTML. Чтобы избежать анализа html-документа, есть ли способ получить простой листинг, такой как ls?

вопрос задан 21.12.2010
ajwood
5918 репутация

5 ответов


  • 21 рейтинг

    Я только что нашел способ сделать это:

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

    Это довольно многословно, так что вам нужно пару раз перейти по каналу grep в зависимости от того, что вы ищете, но информация есть. Похоже, что он печатает в stderr, поэтому добавьте 2>&1, чтобы позволить ему grep. Я согласился на "\. деготь \. gz ", чтобы найти все tarballs, которые должен был предложить сайт.

    Обратите внимание, что wget записывает временные файлы в рабочий каталог и не очищает его временные каталоги. Если это проблема, вы можете перейти во временный каталог:

    $ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
    
    ответ дан ajwood, с репутацией 5918, 21.12.2010
  • 2 рейтинг

    Следующее не является рекурсивным, но у меня это сработало:

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

    Выходные данные являются HTML и записаны в stdout. В отличие от wget, на диск ничего не записано.

    -s (--silent) имеет значение при передаче результатов, особенно в сценарии, который не должен быть шумным.

    По возможности не забывайте использовать ftp или http вместо https.

    ответ дан A-B-B, с репутацией 20353, 29.10.2016
  • 1 рейтинг

    То, что вы просите, лучше всего обслуживать с использованием FTP, а не HTTP.

    HTTP не имеет представления о списках каталогов, FTP не имеет.

    Большинство HTTP-серверов не разрешают доступ к спискам каталогов, и те, которые это делают, делают это функцией сервера, а не протоколом HTTP. Для этих HTTP-серверов они решают сгенерировать и отправить HTML-страницу для потребления человеком , а не потребления машины . Вы не можете это контролировать, и у вас не будет выбора, кроме как анализировать HTML.

    FTP разработан для потребления машины, особенно с введением команд MLST и MLSD, которые заменяют неоднозначную команду LIST.

    ответ дан Remy Lebeau, с репутацией 319888, 1.07.2014
  • 1 рейтинг

    Если он обслуживается по протоколу http, то получить простой список каталогов невозможно. Список, который вы видите при просмотре, который является тем, который извлекает wget, генерируется веб-сервером как HTML-страница. Все, что вы можете сделать, это проанализировать эту страницу и извлечь информацию.

    ответ дан Optimal Cynic, с репутацией 777, 21.12.2010
  • 0 рейтинг

    AFAIK, нет способа получить список каталогов, подобный этому в целях безопасности. К счастью, в вашем целевом каталоге есть HTML-листинг, поскольку он позволяет вам анализировать его и обнаруживать новые загрузки.

    ответ дан Samuel, с репутацией 12768, 21.12.2010