142 votes

7Zip - Ligne de commande : Exclure un ou plusieurs dossiers par un motif joker ?

Une idée sur la manière d'exclure un ou plusieurs chemins d'accès non spécifiés d'une commande 7zip en ligne de commande ?

Je fais quelque chose comme ça :

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

et souhaite exclure toute \bin\*.* o \obj\*.* les dossiers trouvés sous "FolderToArchive".

Pour exclure des fichiers, vous pouvez utiliser l'option -x paramètre. Le fichier d'aide donne cet exemple d'utilisation -x :

7z a -tzip archive.zip *.txt -x!temp.*

C'est très bien pour exclure un fichier. Mais, là encore, j'aimerais exclure un dossier spécifié par un caractère générique. Sous mon "FolderToArchive", il y a plusieurs dossiers, sous ces dossiers il peut y avoir ou non bin\ y obj\ des dossiers. J'aimerais ne pas les inclure dans l'archive.

J'ai essayé des modèles comme

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

Aucune ne semble exclure la bin\ dossier. S'agit-il simplement d'une limitation de 7zip ?

183voto

jasonlaflair Points 668

Pour exclure le bin y obj. de manière récursive, vous pouvez utiliser la commande :

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj

21voto

zhazha Points 321

Pour éviter le bogue, utilisez -r ou -xr avec précaution.

supposons que vous ayez des répertoires comme :

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src

et exécutez la commande :

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin

ce que vous avez dans archive.7z :

.\path2\src
.\path5\src

C'est-à-dire que le .\path2\ y .\path5\ est devenu le dossier supérieur dans archive.7z, et les deux bin ont été exclus.

-x ne supporte que le chemin/nom de fichier relatif dans le dossier supérieur de l'archive.

Donc, si vous voulez seulement exclure .\path1\path2\bin mais pour inclure tous les autres répertoires 'bin', la commande devrait être la suivante :

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

J'ai essayé d'utiliser le chemin absolu dans -x, mais je n'ai jamais réussi.


Mise à jour :

Il existe une option -spf dans 7z pour Linux qui fonctionne avec un chemin absolu.

Selon Marco , -spf est également disponible sur Windows à partir de 7-zip 15.14

2voto

jw_ Points 630

Basé sur la réponse de @zhazha et rendre plus clair la façon d'exclure les sous-dossiers exactement. Sous Windows 10, pour sauvegarder le dossier racine d'une solution Visual Studio :

D:\VS2019\Sln1

alors :

//goto the parent of the root folder first which make thing clearer
//not sure what will happen if you go into the root folder
cd D:\VS2019
"<path-of-7z>\7z.exe" a -tzip -mx0 Sln1_backup.zip Sln1 -x!Sln1\.vs -x!Sln1\Debug -x!Sln1\Release -x!Sln1\lib -x!Sln1\Project1\x64 -x!Sln1\Project2\obj

Vous pouvez alors être sûr que seuls les sous-dossiers spécifiés sont exclus, par exemple Sln1. \Project3\obj ou Sln1 \Project4\lib ne sera pas exclue involontairement. Fonctionne pour l'énorme dossier .vs caché.

-mx0 signifie archive/pas de compression.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X