Perl, как извлечь файл.gz с расширением.txt

В настоящее время я застрял с этой проблемой, где мой файл.gz "some_name.txt.gz" (.gz не виден, но может быть распознан с помощью функций File::Type), а внутри файла.gz есть ПАПКА с именем "some_name.txt", которая содержит другие файлы и папки.

Тем не менее, я не могу извлечь архив, как вы бы вручную (папка с именем "some_name.txt" извлекается вместе с ее содержимым) при вызове функции извлечения из Archive::Extract, потому что он просто извлечет " some_name.txt "папка в виде файла.txt..

Я искал ответы в Интернете, но ни одно из них не является правильным решением. Это можно обойти?

Спасибо!

3 ответа

Решение

Из архива:: Извлечь официальный документ

"Поскольку файлы.gz никогда не содержат каталог, а содержат только один файл;"

Я бы порекомендовал использовать tar в папке, а затем gz. Таким образом, вы можете использовать Archive::Tar для простого извлечения конкретного файла:

Пример из официальных документов:

$ tar-> extract_file ($ file, [$ extract_path]) Записать запись, имя которой эквивалентно имени файла, предоставленного на диск. При желании принимает второй параметр, который является полным собственным путем (включая имя файла), в который будет записана запись. Например:

$tar->extract_file( 'name/in/archive', 'name/i/want/to/give/it' );
$tar->extract_file( $at_file_object,   'name/i/want/to/give/it' );

Возвращает true в случае успеха, false в случае неудачи.

Надеюсь это поможет.

GZIP-файл может содержать только один файл. Если у вас есть архивный файл, который содержит папку плюс несколько других файлов и папок, то у вас может быть файл gzip, содержащий файл tar. В качестве альтернативы у вас может быть zip-файл.

Можете ли вы дать более подробную информацию о том, как был создан файл архива и список его содержимого?

Может быть, вы можете идентифицировать эти файлы с помощью File::Type, переименовать их с расширением.gz вместо.txt, а затем попробовать Archive::Extract на нем?

Другие вопросы по тегам