Comment faire «Fichiers à stocker sans compression» en 7-zip?

25

Existe-t-il un moyen d' empêcher sélectivement certains types de fichiers de compression dans 7-zip, comme dans WinRAR?

J'essaie de compresser un énorme dossier (plusieurs gigaoctets), et je ne veux pas que les fichiers déjà compressés (par exemple les fichiers ZIP) soient recompressés - ils devraient être stockés sans compression.

Mehrdad
la source
Y a-t-il une raison spécifique (économiser chaque peu de temps de traitement possible, les lire sans avoir à regrouper le binaire 7z ou réimplémenter LZMA, etc.) que vous voulez faire cela? De manière générale, la plupart des outils de compression que j'ai rencontrés ont tendance à être assez intelligents pour stocker automatiquement les éléments non compressés s'ils trouvent qu'un fichier répond mal à une tentative de compression supplémentaire.
ssokolow
@ssokolow: Cela fait 4 ans et je suppose que je n'ai jamais répondu à votre question, mais il peut y avoir d'autres raisons telles que minimiser les dommages causés par la corruption et faciliter la récupération des données en cas de catastrophe.
Mehrdad
Question connectée: unix.stackexchange.com/questions/241898/…
bohdan_trotsenko

Réponses:

19

Oui, il est possible d'avoir différentes méthodes de compression pour différents fichiers dans la même archive 7-Zip.

Utilisez la version en ligne de commande de 7-Zip avec le -mparamètre pour spécifier la méthode as Copy, ce qui signifie aucune compression.

Exemple :

7za a -m0=Copy tmp7.7z *.txt

Pour plus d'informations, consultez la section -m (Définir la méthode de compression) .

harrymc
la source
La commande ci-dessus ne compressera pas les fichiers txt et n'ajoutera que les fichiers txt à une archive existante. Avant d'exécuter la commande ci-dessus, un fichier d'archive doit être créé avec les fichiers non txt. Pas si facile s'il existe n types de fichiers différents.
Praveen Sripati,
Si -m0=Copycela ne fonctionne pas, essayez -mx=0.
Bora M. Alper
15

Supposons que vous avez des fichiers zip et que vous avez des fichiers txt non compressés dans votre dossier.

La première étape consiste à créer une archive compressant des fichiers txt à l'aide de la commande suivante.

vous pouvez utiliser -m pour définir les niveaux de compression, cela dépend également de la méthode de compression que vous utilisez

Supposons ici que la compression par défaut est uniquement

7z a compressed.7z *.txt -r 

Vous obtiendrez compressé.7z maintenant.

La deuxième étape sera de copier le fichier déjà compressé dans cette archive ou de créer une nouvelle archive

7z u compressed.7z -u!update.7z -mx0 *.zip 

Il y a plus d'élaboration de la commande de mise à jour ici

Et au cas où vous auriez la liberté d'utiliser une interface graphique, la mise à jour peut se faire de la manière suivante

entrez la description de l'image ici

Manish Singh
la source
Une sorte de tracas mais je suppose que cela fonctionnerait, merci.
Mehrdad
1

J'ai créé un script PowerShell qui compressera rapidement un répertoire en stockant des types de fichiers déjà compressés (comme les fichiers .zip) sans essayer de les recompresser. Il utilise l'interface de ligne de commande de 7zip et utilise des extensions de nom de fichier afin de décider de compresser ou simplement de stocker un fichier donné.

Vous pouvez trouver le script ici: https://gist.github.com/ivanatpr/5dea086172eab573ba71

ivanatpr
la source
0

Techniquement, les fichiers compressés ne se compressent pas davantage, quelque chose à propos d'une limite d'entropie ou autre, j'oublie les détails, mais le maximum que vous obtiendrez est inférieur à 2% que j'ai vu.

La plupart des bons compresseurs vérifient la compression et stockent simplement les fichiers non compressibles car la compression ajouterait alors une surcharge et augmenterait la taille.

Bien sûr, il y a le travail et le temps de regarder le fichier en premier lieu.

Comme indiqué dans d'autres réponses, effectuer plusieurs passes sur votre ensemble de fichiers sera probablement la meilleure solution et facilement scriptable.

Créez l'archive 7z et ajoutez tout MAIS les fichiers compressés en une seule fois, puis ajoutez les fichiers précompressés en tant que données non compressées. (Je le ferais de cette façon puisque les éléments compressibles seraient alors au début de l'archive et les éléments non compressibles à la fin. Cela se diffuserait plus rapidement car il est contigu)

(utilisé 'compresser ...' trop!)

lornix
la source
1
Au cas où cela aiderait quelqu'un, voici l'essentiel de "quelque chose sur une limite d'entropie ou autre". L'entropie peut être considérée comme une mesure d'imprévisibilité. L'idée derrière la compression est que, si vous pouvez prédire un modèle de bits, vous n'avez pas besoin de stocker le tout ... juste des instructions plus compactes sur la façon de le prédire (un mot de code). L'entropie maximale théorique est atteinte lorsqu'il est tout aussi probable que le prochain mot de code puisse être n'importe quoi. La compression supplémentaire des données compressées se produit lorsque la deuxième passe identifie la prévisibilité restante dans la sortie de la première.
ssokolow du