web-dev-qa-db-fra.com

commande pour compresser plusieurs répertoires dans des fichiers Zip individuels

J'ai un seul répertoire qui contient des dizaines de répertoires à l'intérieur.

Je suis nouveau sur la ligne de commande et j'ai du mal à trouver une commande qui compressera chaque sous-répertoire dans un fichier sub-directory.Zip unique.

Donc, à la fin, mon répertoire principal sera rempli de tous mes sous-répertoires d'origine, plus le .Zip fichiers contenant le contenu compressé de chaque sous-répertoire.

Est-ce que quelque chose comme ça est possible? Si oui, veuillez me montrer comment cela se fait.

44
Evster

Vous pouvez utiliser cette boucle dans bash:

for i in */; do Zip -r "${i%/}.Zip" "$i"; done

i est le nom de la variable de boucle. */ signifie chaque sous-répertoire du répertoire actuel et inclura une barre oblique de fin dans ces noms. Assurez-vous que cd au bon endroit avant d'exécuter cela. "$i" nomme simplement ce répertoire, y compris la barre oblique de fin. Les guillemets garantissent que les espaces dans le nom du répertoire ne causeront pas de problèmes. ${i%/} est comme $i mais avec la barre oblique de fin supprimée, vous pouvez donc l'utiliser pour construire le nom du fichier Zip.

Si vous voulez voir comment cela fonctionne, incluez un echo avant le Zip et vous verrez les commandes imprimées au lieu d'être exécutées.

80
MvG