Comment puis-je créer un fichier .zip pour chaque dossier d'un autre dossier?

18

Sous le dossier images\, j'ai les dossiers suivants:

  • Usa\
  • Italy\
  • Japan\

etc..

Je veux un script qui crée un .zippour chacun de ces dossiers, donc j'ai usa.zip, italy.zip, japan.zip.

Comment puis je faire ça?

Juan Claude
la source

Réponses:

10

Je suppose que c'est Windows, car vous utilisez des barres obliques inverses.

Obtenez 7za.exe (la version en ligne de commande de 7-zip ) et placez-le dans votre %PATH%.

Exécutez ensuite ceci dans votre Images\répertoire:

for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"

Ou dans un script batch:

for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"
paradroid
la source
Cela ne fonctionne pas si les dossiers ont des espaces dans leur nom.
jiggunjer
@jiggunjer Oui, vous avez raison. Je l'ai corrigé pour fonctionner avec des espaces dans les noms de dossier.
paradroid
1
Cela fonctionne même avec l'exécutable 7zip normal. J'ai mis à jour 7za en "C: \ Program Files \ 7-Zip \ 7z.exe" et cela a fonctionné sans problème.
user1324161
8

En supposant que vous êtes sous Linux, vous pouvez utiliser un script Bash comme celui-ci:

  #!/bin/bash

  IFS=$'\n'

  for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
    zip -r "$f" "$f"
  done

Ce script prendra le premier argument comme dossier, dans ce cas des images, et recumérera exactement un niveau pour obtenir tous vos dossiers (États-Unis, Italie et Japon) et les compresser au même endroit.

Il ne supprimera pas les anciens fichiers zip ou les dossiers source. Zip est suffisamment intelligent pour détecter les fichiers zip existants et les mettre à jour lors d'une nouvelle exécution. Cependant, si vous supprimez un fichier dans les dossiers source, il ne sera pas supprimé dans les fichiers zip. Vous pouvez contourner ce problème en supprimant au préalable les fichiers existants.

Robert Kühne
la source
J'ai utilisé le script Linux publié par sponiro et ajouté une ligne au début pour supprimer les dossiers: trouver $ 1 -type d | xargs rm -rf
genevish
7

Vous pouvez utiliser Winrar pour cela.

Sélectionnez tous vos dossiers, faites un clic droit et sélectionnez Add to archive. Sélectionnez maintenant l'option Put each file to separate archivesous l'onglet Files:

entrez la description de l'image ici

Cliquez sur OK et vous avez terminé. Si vous voulez des fichiers .zip au lieu de .rar, sélectionnez simplement ZIPdans l' Generalonglet sous Archive format.

nmat
la source
0

Cette réponse de MvG a fonctionné pour moi sur Ubuntu:

Vous pouvez utiliser cette boucle dans bash:

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

iest le nom de la variable de boucle. */signifie chaque sous-répertoire du répertoire courant et inclura une barre oblique de fin dans ces noms. Assurez-vous d'être cdau 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 $imais 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, ajoutez un echoavant le zip et vous verrez les commandes imprimées au lieu d'être exécutées.

Franck Dernoncourt
la source