Я нашел в сети файл tar размером более 50 ГБ. Мне нужно только извлечь небольшие вещи (100 МБ) из этого файла tar. Я понял, что загрузка всего 50 ГБ файла всего за 100 МБ тратит мое время и трафик.

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

2 ответа2

2

Я предполагаю, что протокол HTTP. В моем Kubuntu правильный инструмент - httpfs2.

httpfs2 - это файловая система на основе FUSE для монтирования URL-адресов http или https в виде файлов в файловой системе. В http нет понятия списков каталогов, поэтому можно смонтировать только один URL. Сервер должен иметь возможность отправлять байтовые диапазоны.

Если URL-адрес файла tar является http://ser.ver/bar.tar , выполните следующие действия:

mkdir foo
httpfs2 -f http://ser.ver/bar.tar ./foo

Я использовал -f (остаться на переднем плане) по двум причинам:

  1. Если что-то не так, процесс завершается, и я сразу вижу это.
  2. Процесс печатается на консоли, поэтому в любом случае удобно переключаться на другую консоль.

Теперь у вас должен быть ./foo/bar.tar доступный в вашей файловой системе. Файл доступен для поиска и доступен только для чтения. Извлеките то, что вам нужно, затем размонтируйте (выберите один):

  • fusermount -u ./foo ;
  • Ctrl+C в консоли, где работает httpfs2 ;
  • killall httpfs2 .

Я проверил это решение, смонтировав следующий файл ISO:

http://cdimage.ubuntu.com/cdimage/kubuntu/releases/17.10/release/kubuntu-17.10.1-desktop-amd64.iso

и просмотр его с ark .

Второй тест проводился с архивом tar размером более 30 ГБ, размещенным на сервере Debian в моей локальной сети. Для этого теста был специально создан архив, и я обратил внимание, какие файлы были добавлены в начале, а какие - в конце. Затем на клиенте Kubuntu я использовал mc чтобы войти в архив, httpfs2 httpfs2, и скопировать файл из конца архива. Прошло некоторое время, прежде чем началось фактическое копирование (я думаю, что httpfs2 был «быстрой пересылкой» к выбранному файлу), затем оно прошло без нареканий. Я уверен, что весь архив не был отправлен.

Серверный процесс был apache2 . Подобный тест с python3 -m http.server 80 не прошел на этапе монтирования; этот сервер был слишком прост.

0

вероятно, вы не можете сделать такую вещь.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .