Last active
April 17, 2025 02:26
-
-
Save jamesktan/5977349562e6f6cab9ea to your computer and use it in GitHub Desktop.
Unzipping & Zipping ePub from Command Line
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// To unzip the epub, move the ePub to a folder, cd to it then simply: | |
unzip MyEbook.epub | |
// To zip up an epub: | |
1. zip -X MyNewEbook.epub mimetype | |
2. zip -rg MyNewEbook.epub META-INF -x \*.DS_Store | |
3. zip -rg MyNewEbook.epub OEBPS -x \*.DS_Store | |
Some explanations necessary here. We start each line with two flags: | |
-r (recursive) | |
This means move down through any directories/folders recursively, ensuring that everything in the folders specified gets included | |
-g (grow file) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
mariocha and phoenixeliot - Though I forget exactly where I found these commands, they work well for me.
zip -0Xq archive_name mimetype
-0 sets compression speed to zero, meaning no compression
-X exclude extra file attributes
This command puts the mimetype file into the zip archive first with no extraneous info.
zip -Xr9Dq archive_name *
-X exclude extra file attributes
-r recurse into directories
-9 compress better
-D do not add directory entries
Compresses all the other contents of the current folder into the archive. This works for EPUBs built with and without the OEBPS folder.
Because zip -h2 (long help) did not explain -D adequately, I found the Linux man page useful. If I read it correctly, -D doesn't create directories inside the zip archive for the purpose of saving directory attributes. This does not conflict with the recursion option, which I thought it did before I read the man page.
I found by experiment, that zip ignores dot files like (.) (..) and .DS_Store, so the -x *.DS_Store is not needed on MacOS.