How do you specify filenames within a zip when creating it on the command line from a pipe? How do you specify filenames within a zip when creating it on the command line from a pipe? linux linux

How do you specify filenames within a zip when creating it on the command line from a pipe?


You can do this.

ls | zip test.zip -@

this is done from the notion that i have 3 files in the dir.

-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

and the file itself, the result is then

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

From the Linux Zip Man page

If the file list is specified as -@, zip takes the list of input files from standard input.


You can use a named pipe, and send the request output to it, while zipping from it.

mkfifo output.txt ; mysql [params and query] > output.txt & zip output.zip -FI output.txt ; rm output.txt


I couldn't manage with the PHP answer (out of memory on bigger mysql dumps), and the FIFO was not working as I wanted, so my solution is to rename the file inside the ZIP archive after running the dump, using zipnote (which is included with the zip package on Debian).

mysql [params and query] | zip -q output.zip -echo -e "@ -\n@=newname.sql" | zipnote -w output.zip