программно распаковать tar.gz за один шаг (на windows с 7zip) - PullRequest
31 голосов
/ 01 сентября 2009

ПРОБЛЕМА: Я хотел бы иметь возможность извлечь файлы tar.gz за один шаг. Это делает мой вопрос почти идентичным этому: stackoverflow вопрос для tar-gz .

Мой вопрос почти такой же, но не тот же, потому что я хотел бы сделать это в Windows, используя 7zip командную строку (или что-то подобное) внутри файла bat или ruby ​​/ perl / python скрипт.

ВОПРОС: Эта, казалось бы, простая задача оказывается более сложной, чем кажется на первый взгляд. У кого-нибудь есть скрипт, который это уже делает?

Ответы [ 4 ]

73 голосов
/ 05 февраля 2013

Старый вопрос, но я боролся с ним сегодня, так что вот мой 2с. Средство командной строки 7zip "7z.exe" (у меня установлена ​​версия 9.22) может записывать в стандартный вывод и читать из стандартного ввода, так что вы можете обойтись без промежуточного файла tar с помощью канала:

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"

Где:

x     = Extract with full paths command
-so   = write to stdout switch
-si   = read from stdin switch
-aoa  = Overwrite all existing files without prompt.
-ttar = Treat the stdin byte stream as a TAR file
-o    = output directory

См. Файл справки (7-zip.chm) в каталоге установки для получения дополнительной информации о командах и переключателях командной строки.

Как отметили от @ zespri powershell, буферизует входные данные для второго процесса 7z, поэтому может занимать много памяти, если ваш tar-файл большой. то есть:

& 7z x "somename.tar.gz" -so  | & 7z x -aoa -si -ttar -o"somename"

Обходной путь из этого SO ответа Если вы хотите сделать это из powershell, это передать команды cmd.exe:

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
29 голосов
/ 25 мая 2010
7z e example.tar.gz  && 7z x example.tar

Используйте && для объединения двух команд за один шаг. Используйте 7zip portable (вам понадобятся только 7z.exe и 7z.dll)

12 голосов
/ 01 сентября 2009

Использовать win32 порт tar .

tar -xvfz filename.tar.gz
8 голосов
/ 07 сентября 2012

Поскольку вы попросили 7-zip или что-то подобное, я предоставляю альтернативный инструмент, который был написан для вашего точного варианта использования.

Утилита tartool - это бесплатный инструмент с открытым исходным кодом, созданный с использованием библиотеки .NET SharpZipLib.

Пример команды для извлечения .tar.gz / .tgz - файла,

C:\>TarTool.exe D:\sample.tar.gz ./

Отказ от ответственности: я являюсь автором этой утилиты.

...