Batch compress multiple folders into individual zip files
Here is an Automator Service1 that becomes available in Finder when Folders are selected and emulates the context-menus Compress [n] Items command except it creates an individual zip archive file for each selected Folder in the name of the selected Folder. If the Folder Name.zip file already exists then a " 2"
(space 2) is appended to the filename, e.g. Folder Name 2.zip. This ensures an existing zip archive file is not touched and the zip archive filename will be automatically incremented as necessary.
1 In macOS Mojave, and later, an Automator Service is called a Quick Action. There are also other minor nomenclature differences but they should be more obvious when comparing them to pre-macOS Mojave Automator workflows.
To Create the Service:1
Open Automator and select Service1 or File > New > Service If Automator is already open.
Set Service receives selected to folders and in to Finder.
-
Add a Run Shell Script Action, setting Shell: to /bin/bash and Pass input: to as arguments and add the following code:
for f in "$@"; do dn="$(dirname "$f")" bn="$(basename "$f")" cd "$dn" || exit if [[ ! -e "$bn.zip" ]]; then ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip" else n=2 for i in $bn *.zip; do if [[ "$bn $n.zip" == "$i" ]]; then n="$(( n + 1 ))" fi done ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip" fi done afplay /System/Library/Sounds/Purr.aiff
Save the Service as: Compress Folders Separately
To Use the Service:
In Finder or on the Desktop select multiple Folders, then right-click and select Compress Folders Separately from under Services.
Or after selecting the target Folders, you can also click Finder > Services > Compress Folders Separately from the menu bar.
There you have it, a way to compress multiple folder separately and simultaneously at one time in individual zip archives while emulating how Finder creates a zip archive file. Meaning the zip archive contains preserved resource forks and HFS meta-data in the subdirectory __MACOSX and embeds only the parent directory name source in destination-archive, not the fully qualified pathname as when using zip
(without -j
) to create the archive.
Image of Compress Folders Separately
There's an alternative solution that's built-in if you don't want to use Automator and are fine with changing Archive Utility's settings.
- Open the Archive Utility.app located in /System/Library/CoreServices/Applications/
- Go to File > Preferences
- Change the "Use Archive Format" preference to "Zip archive"
- Drag and drop the folders into its icon in the dock.