Here is an Automator Service 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.
To Create the Service:
Open Automator and select Service 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")" pushd "$dn" 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 popd 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 (Service)