Respostas:
Este pequeno script parece ser a melhor opção, considerando seus requisitos:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Ele lida adequadamente com diretórios com espaços em seus nomes.
Que tal agora: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Explicação: Você executa uma localização em todos os itens no diretório atual. A profundidade máxima de 0 não faz com que seja menor do que os argumentos apresentados. (Nesse caso, * ou todos os itens em seu diretório atual) O argumento 'd' para "-type" corresponde apenas aos diretórios. Então exec executa tar em qualquer combinação. ({} é substituído pelo arquivo correspondente)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Isso criará um arquivo chamado blah.tar.gz para cada arquivo em um diretório chamado blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Se você tiver mais do que simplesmente diretórios no diretório (ou seja, arquivos também, pois ls retornará tudo no diretório), use o seguinte:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
O grep -v exclui o diretório atual que será exibido no find
comando por padrão.
for dir in *