Puedes hacer esto.
ls | zip test.zip [email protected]
esto se hace a partir de la noción de que tengo 3 archivos en el directorio.
-rw-rw-r-- 1 xxx domain users 6 Jan 7 11:41 test1.txt
-rw-rw-r-- 1 xxx domain users 6 Jan 7 11:41 test2.txt
-rw-rw-r-- 1 xxx domain users 6 Jan 7 11:41 test3.txt
y el archivo en sí, el resultado es entonces
Archive: test.zip
Length Date Time Name
-------- ---- ---- ----
6 01-07-10 11:41 test1.txt
6 01-07-10 11:41 test2.txt
6 01-07-10 11:41 test3.txt
-------- -------
18 3 files
Desde la página Linux Zip Man
Si la lista de archivos se especifica como [email protected], zip toma la lista de archivos de entrada de la entrada estándar.
Puede usar una canalización con nombre y enviarle la salida de la solicitud, mientras la comprime.
mkfifo output.txt ; mysql [params and query] > output.txt & zip output.zip -FI output.txt ; rm output.txt
No pude arreglármelas con la respuesta de PHP (memoria insuficiente en volcados mysql más grandes), y FIFO no funcionaba como quería, por lo que mi solución es cambiar el nombre del archivo dentro del archivo ZIP después de ejecutar el volcado, usando zipnote (que se incluye con el paquete zip en Debian).
mysql [params and query] | zip -q output.zip -
echo -e "@ -\[email protected]=newname.sql" | zipnote -w output.zip