I had such a need recently and wrote a small program to estimate the compressed size of directories. After testing various approaches, I found that sampling and compressing fractions of files to be the most accurate - the trick, I found, is in the sampling strategy. Wrote zip-sizer, a small go program, to solve the problem mostly for my personal use. I made releases for windows/mac/linux. Note though, this estimates only for gzip and bzip2, not zip as you require; but you can get a rough idea. (There is also a prototype python script in the "python/" directory that does the same thing; runs with just the stdlib). Hope you find it useful.