3

Для просмотра содержимого архива я могу сделать:

tar -tzvf mytarball.tar.gz

Но это работает только для локальных файлов. Может кто-то указать, как это сделать (если это вообще возможно) для файлов через Интернет.

Я попробовал это с файлом

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -tzv

Но дает

gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Так правильно ли работает tar с потоками для листинга? Существуют ли форматы сжатия, которые позволяют это (не требуя загрузки всего файла)?

5 ответов5

1

Ваша команда будет работать, если вы сказали wget , чтобы вывести загруженный файл на стандартный вывод , а не файл:

wget -q -O /dev/stdout http://… | tar -tzv

Тем не менее, это потребует загрузки всего файла, по крайней мере , для Tar и Zip архивов. Формат Zip помещает свой "каталог" в самый конец; Между тем, Tar не имеет единственного каталога, а просто имеет линейный поток пар заголовок + данные, поэтому имена файлов разбросаны повсюду.

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

1

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

Это должно работать.

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz && tar -tzvf git-1.8.0.tar.gz

Часть из http://www.cyberciti.biz/faq/list-the-contents-of-a-tar-or-targz-file/

Список содержимого файла tar

$ tar -tvf file.tar

Список содержимого файла tar.gz

$ tar -ztvf file.tar.gz

Список содержимого файла tar.bz2

$ tar -jtvf file.tar.bz2
1

Ты можешь использовать:

wget -qO- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

Файл будет загружен, распакован, и на экране появятся файлы.

Но если вы хотите сделать файл Request a и не сохранить его, используйте:

wget -q -O- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

0

В качестве альтернативы, если вы можете запустить шелл-код на удаленном хосте:

ssh remotehost 'tar -tzvf mytarball.tar.gz'

0

Чтобы перенаправить вывод http-данных из файла на стандартный вывод, вам нужно использовать ключ -O , тогда вы можете получить его

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz -O - | tar -tzv

Но все же зачем ты это делаешь? У Tar нет списка файлов, поэтому вы загружаете полный файл, чтобы получить список файлов, и еще раз вам нужно будет загрузить полный файл, чтобы получить нужные файлы. Поэтому, если вы планируете получить некоторые файлы из этого tar.gz, лучше сохранить их и удалить после.

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

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