Получение всех файлов с веб-страницы с помощью curl

Я хотел бы получить все файлы с веб-страницы ниже, используя curl:

http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Я пытался:

curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Он вернул кучу строк в терминал, но не получил ни одного файла.

Ответы (5)

Используйте wgetвместо этого.

Установите его с помощью Homebrew: brew install wgetили MacPorts:sudo port install wget

Для загрузки файлов из списка каталогов используйте -r(рекурсивно), -np(не переходите по ссылкам на родительские каталоги), а -kтакже для того, чтобы ссылки в загруженном HTML или CSS указывали на локальные файлы (кредит @xaccrocheur).

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Другие полезные опции:

  • -nd(без каталогов): загрузить все файлы в текущий каталог
  • -e robots=off: игнорировать ограничения в файле robots.txt и не загружать файлы robots.txt
  • -A png,jpg: принимать только файлы с расширениями pngилиjpg
  • -m(зеркало):-r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: пропустить загрузку, если файлы существуют
wget -r -np -k http://your.website.com/specific/directory. Хитрость заключается в использовании -kдля преобразования ссылок (изображений и т. д.) для локального просмотра.
brewи portу меня не работает установка wget. Что мне делать?
@HoseynHeydari: вы можете использовать rudix.org для скомпилированных двоичных файлов для OSX. поэтому вам нужно установить rudix, а затем использовать: sudo rudix install wget
Вариант -kне всегда работает. Например, если у вас есть две ссылки, указывающие на один и тот же файл на веб-странице, которую вы пытаетесь рекурсивно захватить, wgetкажется, что преобразуется только ссылка первого экземпляра, но не вторая.
Не забудьте /в конце.
Странно, что не скачивается index.html.

curlможет читать только отдельные файлы веб-страниц, набор строк, который вы получили, на самом деле является индексом каталога (который вы также видите в своем браузере, если переходите по этому URL-адресу). Чтобы использовать curlи некоторые инструменты Unix для получения файлов, вы можете использовать что-то вроде

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

который доставит все файлы в текущий каталог.

Для более сложных потребностей (включая получение набора файлов с сайта с папками/каталогами) wget(как уже предлагалось в другом ответе) это лучший вариант.

Спасибо. Это хорошее решение, и отличный рабочий пример!
xmllint --html --xpath '//a/@href'вероятно, лучший парсер, чем grep.
Спасибо за ответ на заданный вопрос, так как я не могу установить wget на сервер, который мне нужен

Ссылка: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

Вы можете использовать следующую команду:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

Пояснение к каждому варианту

  • wget: Простая команда, чтобы сделать запрос CURL и загрузить удаленные файлы на нашу локальную машину.
  • --execute="robots = off": это будет игнорировать файл robots.txt при сканировании страниц. Это полезно, если вы не получаете все файлы.
  • --mirror: Эта опция будет в основном отражать структуру каталогов для данного URL. Это ярлык, -N -r -l inf --no-remove-listingкоторый означает:
    • -N: не извлекать повторно файлы, если они не новее, чем локальные
    • -r: указать рекурсивную загрузку
    • -l inf: максимальная глубина рекурсии (inf или 0 для бесконечности)
    • --no-remove-listing: не удалять файлы .listing
  • --convert-links: сделать так, чтобы ссылки в загруженном HTML или CSS указывали на локальные файлы.
  • --no-parent: не подниматься в родительский каталог
  • --wait=5: подождите 5 секунд между извлечениями. Чтоб сервер не лупить.
  • <website-url>: это адрес веб-сайта, откуда можно скачать файлы.

Удачной загрузки :smiley:

Вы можете использовать httrack, доступный для Windows/MacOS и устанавливаемый через Homebrew.

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

Для тех из нас, кто предпочитает использовать приложение с графическим интерфейсом, есть недорогая условно-бесплатная программа DeepVacuum для Mac OS X , которая реализована wgetв удобной для пользователя форме со списком предустановок, которые могут выполнять часто необходимые задачи. Вы также можете сохранить свои собственные настройки в качестве пресетов.

введите описание изображения здесь