web-dev-qa-db-fra.com

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

J'ai la structure de dossier suivante:

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

Je souhaite exécuter l'outil de ligne de commande 7-Zip pour compresser tous les fichiers de folder1 dans un 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é folder1, qui contient tous les fichiers qui se trouvaient à l'intérieur de ce dossier. 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é?

75
gg.

À partir du Aide 7-Zip fichier:

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 de 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. Il ne traite pas *.* comme "tous les fichiers" - cela signifie "tous les fichiers avec un point dans le nom du fichier". Les fichiers sans extension seront manquants. Si vous voulez vraiment tous les fichiers, utilisez plutôt * à la place.

Enfin, le paramètre -tzip 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. Il n'est requis que si vous souhaitez une extension personnalisée (par exemple, 7za.exe a -tzip foo.xpi <files> pour un module complémentaire Mozilla).

122
afrazier

Cela a fonctionné pour moi

Considérez la 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 [i.e, il démarrera à partir de SubFolders .....]

cd /D "C:\Parent"

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

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

2

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 de répertoire courant 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.

0
Humanier