7Zip - Ligne de commande: Exclure le (s) dossier (s) par un motif générique?


108

Avez-vous une idée de la façon d’exclure un ou plusieurs chemins contenant des 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 les \obj\*.*dossiers trouvés sous "FolderToArchive".

Pour exclure des fichiers, vous pouvez utiliser le -xparamè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 ma « FolderToArchive » il y a plusieurs dossiers, dans ces dossiers , il peut ou ne peut pas être 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 le bin\dossier. Est-ce simplement une limitation de 7zip?

Réponses:


132

Pour exclure les dossiers bin et obj de manière récursive, vous pouvez utiliser la commande:

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

5
Pour tous les autres: si vous voulez ignorer uniquement les fichiers du répertoire racine, utilisez -xr0!*.zip- au moins, je ne pourrais pas le faire fonctionner sans le fichier r0.
Oliver

6
De plus, s’il s’agit d’une ligne de commande Linux / Unix, vous devrez peut-être inclure des guillemets simples pour ne pas ajouter de traitement préliminaire par le shell, par exemple '-x!$RECYCLE.BIN'pour exclure la corbeille d’un lecteur externe.
thanosa75

15

Pour éviter les bogues, 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 lancez 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

Autrement dit, le .\path2\et .\path5\est devenu le dossier principal de archive.7z, et les deux binrépertoires ont été exclus.

-x supporte uniquement le chemin / nom de fichier relatif au dossier principal de l'archive.

Donc, si vous voulez seulement exclure .\path1\path2\bin, mais inclure tous les autres répertoires 'bin', la commande devrait être comme 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 suis jamais parvenu.


Mise à jour:

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

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


2
Remarque: au moins sur Ubuntu, il est conseillé de mettre tous ces termes -x entre guillemets '-x!path2\bin'pour ne pas utiliser de substitution de shell ... (vous obtenez une "commande" beaucoup plus longue et 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 dossier:'-xr!\.foo'
DonBecker
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.