Création d'une archive à partir d'un répertoire sans que le nom du répertoire soit ajouté à l'archive

84

J'ai la structure de dossier suivante:

  • racine
    • dossier1
    • dossier2
    • dossier3
    • 7za.exe

Je veux exécuter l'outil de ligne de commande 7-zip pour compresser tous les fichiers dans folder1un fichier zip appelé folder1.zip.

Lancer le suivant

7za.exe a -tzip folder1.zip folder1\\*.*

produit un fichier zip comme prévu. Cependant, lorsque j'ouvre le fichier zip, il contient un dossier appelé folder1et contient tous les fichiers qu'il contenait. Je ne veux pas que le nom du dossier soit ajouté au dossier zip, c’est-à-dire que je voudrais ajouter tous les fichiers dans un format de fichier "plat".

Je ne souhaite pas non plus exécuter de manière récursive l'outil de ligne de commande pour chaque fichier / dossier.

Existe-t-il un commutateur offrant cette fonctionnalité?

bien joué.
la source
Pouvez-vous cddans folder1 et 7za.exe a -tzip ..\folder1.zip *.*?
Zpletan

Réponses:

137

À partir du fichier d’ aide 7-Zip :

une commande (Ajouter)

Ajoute des fichiers à archiver.

Exemples

7z a archive1.zip subdir\

ajoute tous les fichiers et sous-dossiers de dossier subdir à archive archive1.zip. Les noms de fichiers dans l’archive contiendront subdir \ prefix.

7z a archive2.zip .\subdir\*

ajoute tous les fichiers et sous-dossiers du dossier subdir à archive archive2.zip. Les noms de fichiers dans l’archive ne contiendront pas subdir \ prefix.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Les noms de fichiers dans l’archive c: \ archive3.zip contiendront le préfixe dir2 \ dir3 \, mais ils ne contiendront pas le préfixe c: \ dir1 \.

Donc, la commande que vous voudriez être: 7za.exe a folder1.zip .\folder1\*

Faites également attention au traitement des caractères génériques par 7-Zip. Cela ne traite pas *.*comme "tous les fichiers" - cela signifie "tous les fichiers avec une période dans le nom du fichier". Les fichiers sans extension seront manquants. Si vous voulez vraiment tous les fichiers, utilisez *plutôt.

Enfin, le -tzipparamètre n'est pas nécessaire si le nom du fichier d'archive se termine par .zip. 7-Zip est suffisamment intelligent pour déterminer le format que vous souhaitez dans ces cas. Ce n'est nécessaire que si vous voulez une extension personnalisée (par exemple 7za.exe a -tzip foo.xpi <files>pour un add-on Mozilla).

afrazier
la source
2

Cela a fonctionné pour moi

Considérez une structure de dossier comme C: \ Parent \ SubFolders ..... Et vous voulez créer parent.zip qui contiendra tous les fichiers et dossiers C: \ Parent sans dossier parent [c.-à-d. Qu'il démarrera à partir de Sous-dossiers .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Cela va créer Parent.zip dans C: \ Parent

Pritesh Dhokchaule
la source
2
Cela duplique une autre réponse et n’ajoute aucun nouveau contenu. S'il vous plaît, ne postez pas de réponse sauf si vous avez réellement quelque chose de nouveau à contribuer.
DavidPostill
Eh bien, alors que je cherchais une solution, je n’ai pas obtenu exactement cette solution. Évidemment, je ne ferai pas que copier-coller des réponses trouvées en ligne. Je passe du temps dessus et j’ai pensé que je devrais le partager. Selon moi, vous pouvez trouver cette réponse exacte ici et sur Stack Overflow publié par moi.
Pritesh Dhokchaule
Notez que 7-Zip ne *.*signifie pas "tous les fichiers", mais plutôt "tous les fichiers qui ont un point comme partie du nom du fichier". Donc, cette réponse omettra en fait les fichiers sans extension (ceci est noté dans la réponse acceptée).
Bill_Stewart
1

Juste pour développer la réponse acceptée (je n'ai pas pu ajouter de commentaire ici):

Sous Linux, ajouter '*' ne fonctionnait pas pour moi, alors j'ai fini par concocter une ligne de commande plus détaillée qui donnait le résultat souhaité:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

explication du script:

  • enregistrer le chemin actuel du répertoire pour l'utiliser plus tard;
  • accédez au répertoire qui doit être archivé;
  • créer une archive (notez '.' (point) à la fin);
  • retourner à la dir originale;
  • se débarrasser de la variable qui stockait le chemin de répertoire d'origine

J'espère que cela pourra être utile à quelqu'un.

Humanier
la source
Je suggèrerais de placer les *guillemets (sinon, le shell le développera dans les fichiers de cet endroit).
Simon Sobisch
-1

Que dis-tu de ça. Par exemple, dossier / sous-dossier1, dossier / sous-dossier2

sélectionnez tous les sous-dossiers> rightclick puis créer une archive> sélectionnez le format de votre choix

* Le nom de l'archive serait le dossier parent.

Simple droit?

utilisateur708375
la source
3
La question porte sur la CLI pour 7-zip, pas sur l'utilisation de l'interface graphique. Apprendre à utiliser l'interface graphique est inutile lorsque vous voulez automatiser des choses.
binki