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

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

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

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

Спасибо!


person ps_chou    schedule 21.08.2013    source источник
comment
Что вы имеете в виду под .gz не видно?   -  person friedo    schedule 21.08.2013
comment
о, просто означает, что в нем отсутствуют расширения, когда вы просматриваете его на компьютере, но он распознается как файл .gz без проблем   -  person ps_chou    schedule 21.08.2013
comment
Я немного смущен, мое впечатление о формате .gz состоит в том, что это процедура сжатия одного файла, подходящая для сжатия простых файлов или больших архивных файлов, таких как файлы в формате .tar. Если вы объясните, какую ручную команду вы бы использовали, чтобы открыть этот файл .gz, возможно, мы сможем помочь вам открыть сжатый в нем архив.   -  person tjd    schedule 22.08.2013


Ответы (3)


Из официального документа Archive::Extract.

«Поскольку файлы .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 в случае неудачи.

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

person tal.tzf    schedule 22.08.2013

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

person nitekrawler    schedule 21.08.2013
comment
ПАПКА name.txt находится в архиве .gz, поэтому я не могу изменить ее, если не распаковаю, но если я это сделаю, она выйдет в виде нечитаемого файла .txt. вот где я застрял. - person ps_chou; 21.08.2013
comment
Думает ли Archive::Extract, что это gz-файл? (используя методы быстрой проверки) . - person nitekrawler; 22.08.2013
comment
да, у него нет проблем с распознаванием самого архива .gz. проблема в извлечении. он путается при извлечении папки с именем .txt, поэтому он распознает папку как файл .txt. - person ps_chou; 22.08.2013

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

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

person pmqs    schedule 22.08.2013