About
The zip manager in Linux
Compression:
- take advantage of redundancy between files.
split archives:
- storing a large archive on multiple removable media.
- split big file ?
How to
List
List the content
unzip -l myFile.zip
Example:
/usr/bin/unzip -l p25797429_111190_Linux-x86-64.zip
Archive: p25797429_111190_Linux-x86-64.zip
Length Date Time Name
-------- ---- ---- ----
0 04-12-17 08:55 25797429/
68000 04-12-17 08:55 25797429/p21517672_111190_Generic.zip
318682896 04-12-17 08:30 25797429/p25710656_111190_Linux-x86-64.zip
545626254 04-12-17 08:55 25797429/p25818798_111190_Generic.zip
456596466 04-12-17 08:33 25797429/p25710602_111190_Linux-x86-64.zip
182417792 04-12-17 08:55 25797429/p25738050_111190_Generic.zip
114984 04-15-17 20:38 25797429/README.html
1052740398 04-12-17 08:55 25797429/p25710734_111190_Generic.zip
91360658 04-12-17 08:55 25797429/p24346370_111190_Generic.zip
1036787935 04-12-17 08:36 25797429/p25796832_111190_Linux-x86-64.zip
-------- -------
3684395383 10 files
Unzip all files except the root directory
When download zip archive, you get in the created archive in the root a single directory with the name of the archive. If you want to skip its creation, you can:
- unzip and move
apt-get install -y libarchive-tools
bsdtar --strip-components=1 -xvf file.zip
where --strip-components sets the number of part to be deleted from the path.
Unzip all zip files of a directory
/usr/bin/unzip \*.zip
..........
..........
inflating: 13952743/files/common/script_handlers/MDS_handler.py
creating: 13952743/files/clone/
creating: 13952743/files/clone/provision/
inflating: 13952743/files/clone/provision/adf_t2p_registration.xml
inflating: 13952743/files/clone/provision/adf-t2p-cloner.jar
inflating: 13952743/README.txt
9 archives were successfully processed.
Unzip only a sub-directory of the zip file
The root directory is still preserved 'my/sub/folder', you need to move it. The -j option flatten the whole structure and is not what you want
unzip file.zip 'my/sub/folder' -d /dest/dir
Zip a directory recursively
/usr/bin/zip -r targetFile.zip ./targetDir/*
in the background
nohup zip -r file.zip directory/* &
You can monitor it with the command:
jobs
or with this until statement (You need to change the pid)
pid=22018
count=0
while kill -0 $pid 2> /dev/null; do
count=$(( $count + 1 ))
echo "${count} - Process is running"
sleep 10
done
echo "${count} - Process has exited"
Zip a file
zip targetFile.zip /myFile
Unzip in a target directory
unzip file.zip -d myTargetDirectory
Zip only a subset of a files
Under Unix, the option -@ file list can be used to powerful effect in conjunction with the find command.
For example, to archive all the C source files in the current directory and its subdirectories:
find . -name "*.[ch]" -print | zip source -@
Zip a subset of files selected by attributes (date/name…)
With the find
Example: zip all files modified the last 7 days
find . -mtime -7 -type f -print | zip lastSevenDaysModifiedFiles.zip -@
where:
- . means start the search from the current directory
- -mtime -7 means select all files modified from 7 days ago.
- -@ tells zip to read files from the input
Support
unzip: cannot find or open
You may get this kind of message:
unzip: cannot find or open ./p25797429_111190_Linux-x86-64.zip, ./p25797429_111190_Linux-x86-64.zip.zip or ./p25797429_111190_Linux-x86-64.zip.ZIP.
Just try to use another unzip application.
Example:
/usr/bin/unzip