Search code examples
ubuntuzip

How to create an empty zip file in Ubuntu?


I have a scenario where I must first create a zip file, and after, when my files arrive from another location, they will be added into the zip.

This second part is done with the -u parameter:

zip -u {{project}}.zip {{file}}

--help for this command isn't quite helpful either:

user@host:~# zip --help
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help

Solution

  • I have done it the dirty way:

    Created an file called emptyfile with one byte in it (whitespace).

    Then I added that file into the zip file:

    zip -q {{project}}.zip emptyfile
    

    To finally remove it:

    zip -dq {{project}}.zip emptyfile
    

    (if -q is omitted, you will get warning: zip warning: zip file empty)

    This way I've got an empty zip file one can -update.

    All that can be converted to a oneliner (idea from GaspardP):

    echo | zip -q > {{project}}.zip && zip -dq {{project}}.zip -
    

    Is there a more elegant way to do this?