要は、
somedir/
+- dir01/
| +- ...
+- dir02/
| +- ...
+- dir03/
| +- ...
:
みたいになっている状態のディレクトリから
somedir/
+- dir01.zip
+- dir01/
| +- ...
+- dir02.zip
+- dir02/
| +- ...
+- dir03.zip
+- dir03/
| +- ...
:
こうしたいということです。
dir0{1,2,3}.zip を展開すると、それぞれ dir0{1,2,3} の中身が出てくるみたいな感じです。
find(1) と zip(1) をつかってやっていきます。
$ find /path/to/somedir/ -maxdepth 1 -mindepth 1 -type d -exec zip -r {}.zip {} \;
カレントディレクトリで実行する場合は、単に以下のようにすればよいです:
$ find . -maxdepth 1 -mindepth 1 -type d -exec zip -r {}.zip {} \;
ターゲットとなるディレクトリ以下のディレクトリに対しても再帰的に zip が実行されないように -maxdepth 1 と指定し、somedir/ そのものが zip されないように -mindepth 1 と指定してあるところがミソです。