У вашего скрипта есть две проблемы.
Во-первых, вы смешиваете пути Windows и Linux / Unix в скрипте.Позвольте мне проиллюстрировать
Я создал подкаталог с именем source_folder , чтобы соответствовать вашему сценарию
$ dir source_folder
Volume in drive C has no label.
Volume Serial Number is 7CF0-B66E
Directory of C:\Scratch\source_folder
26/11/2018 19:48 <DIR> .
26/11/2018 19:48 <DIR> ..
26/11/2018 17:27 840 try.pl
01/06/2018 13:02 6,653 url
2 File(s) 7,493 bytes
Когда я запускаю ваш скрипт без изменений, я получаю очевидно пустой zip-файл при просмотре в проводнике Windows.Но, если я использую распаковку командной строки, я вижу, что source_folder.zip не пуст, но у него есть нестандартные имена файлов, которые являются частью Windows и частью Linux / Unix.
$ unzip -l source_folder.zip
Archive: source_folder.zip
Length Date Time Name
--------- ---------- ----- ----
840 2018-11-26 17:27 \source_folder/try.pl
6651 2018-06-01 13:02 \source_folder/url
--------- -------
7491 2 files
Смесь-и-совпадение путей Windows и Unix создается в этой строке вашего скрипта
find(\&process_file, $cwd . "\\source_folder");
Вы объединяете путь в стиле Unix в $ cwd с частью windows "\ source_folder".
Измените строку, чтобы использовать прямую косую черту, а не обратную косую черту, чтобы получить согласованный путь в стиле Unix.
find(\&process_file, $cwd . "/source_folder");
Вторая проблема - эта строка
zip \@files => "$zip",
FilterName => sub{ s|\Q$cwd|| },
BinmodeIn =>1
or die "zip failed: $ZipError\n";
Для замены, s|\Q$cwd||
, требуется дополнительный символ "/", например s|\Q$cwd/||
, чтобы убедиться, что путь, добавленный в zip-архив, является относительным путем.Таким образом, строка становится
zip \@files => "$zip", FilterName => sub{ s|\Q$cwd/|| } or die "zip failed: $ZipError\n";
После внесения этих двух изменений я могу просмотреть zip-файл в проводнике и получить относительные пути в стиле Unix при использовании командной строки unzip
$ unzip -l source_folder.zip
Archive: source_folder.zip
Length Date Time Name
--------- ---------- ----- ----
840 2018-11-26 17:27 source_folder/try.pl
6651 2018-06-01 13:02 source_folder/url
--------- -------
7491 2 files