Получить список 7zip-файлов на удаленном HTTP-сервере
В Интернете есть сервер, на котором размещены терабайты данных, инкапсулированных в многочисленные архивы 7zip (.7z). Некоторые, но не все, эти данные мне интересны. Я только знаю, какие данные интересны, если я могу проверить имена файлов в архиве.
Вопрос: Как я могу получить список 7zip-файлов с удаленного HTTP-сервера без предварительной загрузки всего файла?
Размер этих архивов варьируется от мегабайта до гигабайта, и я действительно не хочу тратить время и трафик на скачивание архива, если он не содержит данных, которые я могу использовать.
Приложение: Я подумал о довольно окольном решении этой проблемы, но я не могу перестать думать, что должно быть более простое решение, и, конечно, другие люди столкнулись (или столкнутся) с этой же проблемой.
3 ответа
Я нашел способ сделать это в системе, которая поддерживает файловую систему в USErspace (FUSE). Я отвечаю на свой вопрос на случай, если кому-то понадобится сделать то же самое.
Существует модуль FUSE под названием httpfs2, который позволяет подключить URL-адрес HTTP, чтобы он выглядел так, как будто он является частью локальной файловой системы. Httpfs2 может извлекать определенные диапазоны байтов с удаленного сервера в ответ на вызовы чтения файловой системы, которые выполняет программа.
Чтобы установить этот инструмент в Ubuntu Linux:
apt-get install httpfs2
Создайте точку монтирования в файловой системе:
mkdir mount-point
Смонтируйте удаленный URL:
httpfs2 http://remote.server.tld/path/archive-file.7z mount-point
Теперь файл archive-file.7z
похоже, что это часть файловой системы:
ls mount-point/archive-file.7z
7za l mount-point/archive-file.7z
Чтобы размонтировать каталог:
fusermount -u mount-point
Этот подход позволит вам перечислять содержимое любого HTTP-архива (используя правильный инструмент архивирования для составления списка содержимого) без загрузки всего (возможно, огромного) архива.
Там нет метода на стороне клиента через просто "HTTP", чтобы облегчить то, что вы запрашиваете.
Так что этого не произойдет, если сервер не предоставит вам список, что потребует пользовательского программирования и / или ручной работы на стороне сервера для создания списка.
httpfs2
просто выдавал мне различные ошибки, такие какreply does not contain newline!
и не сработало.
Я добился успеха с https://github.com/fangfufu/httpdirfs
apt install httpdirfs
mkdir ~/Downloads/httpdirfs
httpdirfs -f --cache --dl-seg-size 1 https://example.com/path/to/folder/ ~/Downloads/httpdirfs
По какой-то причине--single-file-mode
опция отсутствует в Ubuntu 22.04, поэтому я смонтировал всю папку вместо одного файла. я также использовал--dl-seg-size 1
чтобы избежать загрузки нежелательного контента с медленного сервера.