Как распаковать архив ".zip" и перенаправить вывод указанного файла с помощью Perl? - PullRequest
1 голос
/ 21 мая 2019

Допустим, у меня есть zip-файл с именем myPartial.zip, и я хочу разархивировать этот myPartial.zip архив и перенаправить вывод в файл с именем output.txt.

Для этого я мог бы использовать следующий скрипт:

unzip -Z1 myPartial.zip | grep -v "/$" >> my.log

Мой вопрос: как мне сделать то же самое в Perl?

Ответы [ 4 ]

1 голос
/ 21 мая 2019

Хорошо, значит, unzip -Z1 foo.zip отображает список имен файлов файлов в zip-архиве, а не извлекает файлы. Это имеет больше смысла хотеть все в одном файле. И вам нужны только файлы, а не каталоги.

Итак, Perl однострочный:

perl -MArchive::Zip -E '$, = "\n"; say grep { m![^/]$! } Archive::Zip->new($ARGV[0])->memberNames' foo.zip >> my.log

Но на самом деле проще использовать unzip / zipinfo, как вы уже.

1 голос
/ 21 мая 2019

Существует несколько опций для разархивирования в Perl.

Первый - просто запустить команду оболочки в Perl.

system 'unzip -Z1 myPartial.zip | grep -v "/$" >> my.log';

Далее следует использовать один из zip-модулей.Их несколько, включая Archive :: Zip , IO :: Uncompress :: Unzip и Archive :: Zip :: SimpleUnzip .

Необходимость использования одного из модулей зависит от требований того, что вы делаете.

0 голосов
/ 11 июня 2019

Спасибо, ребята.С помощью системной команды это сработало.

0 голосов
/ 21 мая 2019

Вы можете попробовать запустить команду оболочки напрямую, используя метод system:

system("unzip -Z1 myPartial.zip | grep -v "/$" >> my.log");

Если вы хотите прервать выполнение сценария после завершения, используйте метод exec:

exec("unzip -Z1 myPartial.zip | grep -v "/$" >> my.log");

Если вы хотите обработать вывод программы напрямую в PERL, просто используйте обратные клавиши для выполнения команды и получения ее вывода:

$response = `unzip -Z1 myPartial.zip | grep -v "/$" >> my.log`;

Затем вы можете использовать print для предварительного просмотра вывода, например:

print $response;

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...