Из того, что я могу понять, вы не можете сделать и то, и другое с помощью команды 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
person
Peter Lindqvist
schedule
07.01.2010