Из того, что я могу собрать, вы не можете сделать оба с помощью команды zip
, я имею в виду, что вы не можете одновременно указать имена файлов и передать содержимое. Вы можете либо передать содержимое, и результирующий файл будет -
, либо вы можете передать имена файлов с помощью -@
.
Это не значит, что это невозможно при использовании других техник. Я обрисую один из них ниже. Это означает, что у вас должен быть установлен PHP и загружено расширение zip.
Там может быть целый ряд других способов сделать это. Но это самое простое, что я знаю. О, и это тоже однострочник.
Это рабочий пример использования PHP
echo contents | php -r '$z = new ZipArchive();$z->open($argv[1],ZipArchive::CREATE);$z->addFromString($argv[2],file_get_contents("php://stdin"));$z->close();' test.zip testfile
Для запуска в Windows просто поменяйте одинарные и двойные кавычки. Или просто поместите скрипт в файл.
«test.zip» - это полученный файл Zip, «testfile» - это имя содержимого, которое передается в команду.
Результат от unzip -l test.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
6 01-07-2010 12:56 testfile
--------- -------
6 1 file
А вот рабочий пример использования python
echo contents | python -c "import sys
import zipfile
z = zipfile.ZipFile(sys.argv[1],'w')
z.writestr(sys.argv[2],sys.stdin.read())
z.close()
" test5.zip testfile2
Результат unzip -l
Archive: test5.zip
Length Date Time Name
-------- ---- ---- ----
9 01-07-10 13:43 testfile2
-------- -------
9 1 file
Результат unzip -p
contents