Comment pourrais-je compresser des sous-répertoires dans des archives distinctes?
Exemple:
directory
subdir1
subdir2
Doit créer subdir1 (.tar) .gz et subdir2 (.tar) .gz
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)
la source
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.
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:
Le grep -v exclut le répertoire courant qui apparaîtra
find
par défaut dans la commande.la source
for dir in *