Question 7Zip - Ligne de commande: exclure le ou les dossiers par motif générique?


Une idée sur la façon d'exclure un ou des chemins de caractères génériques d'une commande 7zip en ligne de commande?

Je fais quelque chose comme ça:

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

et voudrait exclure tout \bin\*.* ou \obj\*.* dossiers trouvés sous "FolderToArchive". Pour exclure des fichiers, vous pouvez utiliser le -x paramètre. Le fichier d'aide donne cet exemple d'utilisation -x:

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

C'est excellent pour exclure un fichier. Mais, encore une fois, je voudrais 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\ et obj\ Dossiers. Je voudrais ne pas les inclure dans les archives.

J'ai essayé des modèles comme:

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

Aucun ne semble exclure. Est-ce simplement une limitation de 7zip?


95
2018-01-18 15:37


origine




Réponses:


Pour exclure le poubelle et obj récursivement les dossiers, vous pouvez utiliser la commande:

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

114
2018-01-18 15:53



Pour tout le monde: si vous voulez ignorer uniquement les fichiers du répertoire racine, utilisez -xr0!*.zip - au moins je ne pouvais pas le faire fonctionner sans le r0. - Oliver
En outre, s'il s'agit d'une ligne de commande Linux / Unix, vous devrez peut-être inclure des guillemets simples pour ne pas ajouter de prétraitement au shell, par exemple '-x!$RECYCLE.BIN' pour exclure la corbeille d'un lecteur externe. - thanosa75


Pour éviter les bogues, utilisez soigneusement -r ou -xr.

supposons que vous ayez des répertoires comme:

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

et lancez la commande:

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

ce que vous avez dans l'archive.7z:

.\path2\src
.\path5\src

C'est le .\path2\ et .\path5\ Est devenu le dossier du haut dans archive.7z, et les deux bin les annuaires ont été exclus.

-x ne supporte que le chemin / nom du 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 ressembler à ceci:

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'y parviens jamais.


Mettre à jour:

Il y a une option -spf en 7z pour Linux qui fonctionne avec le chemin absolu.

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


11
2018-03-01 10:27



Note: Au moins sur Ubuntu, il est préférable de mettre tous ces termes entre guillemets '-x!path2\bin' ne pas se lancer dans la substitution de shell ... (vous obtenez une "commande" beaucoup plus longue, syntaxiquement incorrecte ...) - Frank Nocke
Pour faire référence au commentaire de @FrankNocke, vous pouvez également le faire sur Windows pour autoriser les points dans les noms de dossiers: '-xr!\.foo' - DonBecker