Réponses:
Ce petit script semble être votre meilleure option, compte tenu de vos besoins:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Il gère correctement les répertoires avec des espaces dans leurs noms.
Que dis-tu de ça: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Explication: vous exécutez une recherche sur tous les éléments du répertoire en cours. Maxdepth 0 ne le rend pas récursif plus bas que les arguments donnés. (Dans ce cas *, ou tous les éléments de votre répertoire actuel) L'argument 'd' de "-type" ne correspond qu'aux répertoires. Ensuite, exec exécute tar sur toutes les correspondances. ({} est remplacé par le fichier correspondant)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Cela créera un fichier appelé blah.tar.gz pour chaque fichier d'un répertoire appelé blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Si vous avez plus que de simples répertoires dans le répertoire (c'est-à-dire des fichiers également, car ls retournera tout dans le répertoire), alors utilisez ceci:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Le grep -v exclut le répertoire courant qui apparaîtra find
par défaut dans la commande.
for dir in *