Respuestas:
Este pequeño script parece ser su mejor opción, dados sus requisitos:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Maneja correctamente directorios con espacios en sus nombres.
Qué tal esto: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Explicación: ejecuta una búsqueda en todos los elementos del directorio actual. Maxdepth 0 hace que no se repita más bajo que los argumentos dados. (En este caso *, o todos los elementos en su directorio actual) El argumento 'd' para "-type" solo coincide con los directorios. Entonces exec ejecuta tar en cualquier partido. ({} se reemplaza por el archivo correspondiente)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Esto creará un archivo llamado blah.tar.gz para cada archivo en un directorio llamado blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Si tiene más que simplemente directorios en el directorio (es decir, archivos también, ya que ls devolverá todo en el directorio), use esto:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
El grep -v excluye el directorio actual que se mostrará en el find
comando por defecto.
for dir in *