Risposte:
Questo piccolo script sembra essere la migliore opzione, dati i tuoi requisiti:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Gestisce correttamente le directory con spazi nei loro nomi.
Cosa ne pensi di questo: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Spiegazione: si esegue una ricerca su tutti gli elementi nella directory corrente. Maxdepth 0 non lo fa ricorrere più in basso rispetto agli argomenti forniti. (In questo caso *, o tutti gli elementi nella directory corrente) L'argomento 'd' su "-type" corrisponde solo alle directory. Quindi exec esegue tar su qualsiasi corrispondenza. ({} è sostituito dal file corrispondente)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Questo creerà un file chiamato blah.tar.gz per ogni file in una directory chiamata blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Se hai più di una semplice directory nella directory (es. Anche i file, poiché ls restituirà tutto nella directory), allora usa questo:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v esclude la directory corrente che apparirà nel find
comando di default.
for dir in *