Philosophy, technology, and the future of work
1 min read

On a Mac, how do I programatically compress each folder in a folder?

As part of cleaning out some old drive storage, I needed to zip a folder of folders. I could, of course, do this by hand, but it was a lot of folders and would be rather tedious. Instead of doing that for 10 minutes, I took 2 hours to figure out an automated solution!

I tried Forklift, Automator, Shortcuts, and Pathfinder. Nothing could do it; at least I couldn’t find a way to do it. After some searching, I found partial solutions in AppleScript. Here’s what I came up that solved my problem.

tell application “Finder"	set theFolders to selection	repeat with aFolder in theFolders		set theItem to aFolder as alias
		set itemPath to quoted form of POSIX path of theItem
		set fileName to name of theItem
		set theFolder to POSIX path of (container of theItem as alias)
		set zipFile to quoted form of (fileName & ".zip")
		do shell script "(cd " & quoted form of theFolder & " && zip -r " & zipFile & " " & quoted form of fileName & ")"	
	end repeat
end tell

A key feature of this solution is that it doesn’t create an archive with the full pathname. The zip file contains only the folder name and “down”.