Как и чем лучше "перебрать" все папки и обжать все в них? Я умею только в одной папке все пережимать.
Ну, если так, то проблем быть не должно. Просто рекурсивно обходите дерево каталогов.
Скажем, пишете функцию compressFolder(folder), которая будет сжимать содержимое каталога, переданного в параметре. В ней перебираете все содержимое, по следующему принципу: если это изображение — сжимаете (вы же умеете), а если это папка (допустим, путь к ней записывается в folder_i), то вызываете compressFolder(folder_i). Таким образом осуществляется рекурсивный обход дерева каталогов.
PS: да, вариант
@sim3x куда интереснее.