Quelle est la méthode de compression la plus rapide pour un grand nombre de fichiers?

14

Je dois compresser un répertoire contenant environ 350 000 fichiers assez petits, soit environ 100 Go au total. J'utilise OSX et j'utilise actuellement l'outil standard "Compress" qui convertit ce répertoire en fichier .zip. Y a-t-il un moyen plus rapide de faire cela?

Pointe
la source
Vous ne pouvez probablement pas battre tar car il ne compresse pas réellement, mais uniquement des archives, sans options spécifiques permettant de le faire. En réponse, j'aimerais voir des preuves, pas d'opinion ...
Daniel Beck
1
Cela dépend de la compression souhaitée.
ta.speot.is
1
J'ai fini par utiliser du goudron et, pour des raisons de rapidité, je n'ai pas encore essayé de le compresser. Il a été en mesure de terminer à temps pour ce dont j'avais besoin. Merci!
Spike
@DanielBeck, le problème avec tar est qu'ils ne montrent pas l'arborescence. Donc, même pour obtenir une "vue", nous devons décompresser tout ce goudron. Existe-t-il des alternatives à tar qui affiche une vue de répertoire?
Pacerier

Réponses:

15

Pour les répertoires, j'utiliserais une tarconnexion bzip2avec une compression maximale.

une façon simple de faire est,

tar cfj archive.tar.bz2 répertoire-à-archiver / 

Cela fonctionne très bien si vous n’avez pas l’intention d’extraire de petits ensembles de fichiers de l’archive
et que vous avez juste l’intention de tout extraire à tout moment.
Pourtant, si vous ne voulez obtenir un petit ensemble de fichiers sur, ce ne est pas trop mal.

Je préfère appeler ces archives filename.tar.bz2et les extraire avec l' xfjoption ' '.

Le tuyau de compression maximale ressemble à ceci,

tar cf - répertoire-à-archiver / | bzip2 -9 -> archive.tar.bz2  
# ^ pipe l'archive d'ici pour faire un zip-dans ^ dans le fichier archive. 

Remarque: la bzip2méthode "et plus de compression tend à être plus lente que gzipd'habitude tar cfz".

Si vous avez un réseau rapide et que les archives vont être placées sur une machine différente,
vous pouvez accélérer avec un tuyau sur le réseau (en utilisant efficacement deux machines ensemble).

tar cf - dir / | ssh user @ server "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ dirige l'archive sur le réseau pour compresser et archiver sur une machine distante.

Quelques références,

  1. Linux Journal: Comparaison des outils de compression , 28 juillet 2005
  2. gzip vs. bzip2 , 26 août 2003
  3. Un repère rapide: Gzip vs. Bzip2 vs. LZMA , 31 mai 2005
nik
la source
2
Le questionneur a demandé la méthode la plus rapide: bzipper une goudron de 100 Go prendrait toute une vie! Il arrive un point où l’espace disque est si peu coûteux que prendre des aéons pour tirer le maximum de redondance possible n’est qu’un gaspillage insensé de ressources, sauf si cela est absolument nécessaire. Avec la plus grande partie de l'utilisation du disque occupée dans un espace restreint, gzipper le goudron avec -1 ferait probablement assez bien le travail et permettrait de passer à la tâche suivante quelques mois plus tôt!
Andy Lee Robinson
Bien que je convienne qu'un fichier de 100 Go ne vaut probablement pas la peine d'être compressé dans sa totalité, je ne pense pas que bzip2 prendra linéairement plus de temps pour 100 Go par rapport à 1 Go (par exemple). J'adorerais voir une théorie ou des données montrant l'une ou l'autre manière.
Nik
Je comprends que le dictionnaire de bzip2 est adaptatif, il recherche donc constamment de nouvelles redondances dans la fenêtre de recherche jusqu’à la fin du fichier. Sous réserve de l'homogénéité de l'entropie du fichier, il devrait être relativement linéaire. Ce serait un mauvais compresseur qui supposait qu'il avait tout ce dont il avait besoin depuis le début du fichier pour pouvoir compresser rapidement le reste, mais dans certains cas, c'est peut-être tout ce qui est nécessaire, bien qu'il existe de meilleurs moyens de vieillir que de le faire fonctionner. de manière empirique avec des jeux de données de 100 Go!
Andy Lee Robinson
7

Ce gars a fait des recherches à ce sujet. Il semble que .zip compresse plus rapidement des fichiers plus volumineux. Cependant, il en résulte une des plus grandes tailles de compression. On dirait également qu'il utilisait des utilitaires Windows, mais je parie que l'utilitaire OSX est presque aussi optimisé.

Voici un excellent site Web où de nombreux utilitaires de compression ont été évalués en termes de rapidité sur de nombreux fichiers. Il existe de nombreux autres tests sur ce site que vous pourriez consulter pour déterminer le meilleur utilitaire pour vous.

Une grande partie de la rapidité a à voir avec le programme que vous utilisez. J'ai utilisé l'utilitaire de 7zip pour Windows, et je trouve que c'est très rapide. Cependant, la compression de nombreux fichiers prend du temps, quoi qu'il en soit, je la laisse simplement aller du jour au lendemain. Ou vous pouvez simplement tarifier le tout et ne pas le compresser ... Personnellement, je déteste déterrer de grandes archives, je ferais donc attention si c'est ce que vous voulez faire.

Dennis
la source
0

Je préfère utiliser

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

pour déplacer des fichiers vers un autre serveur et les convertir en même temps

oussama fahd
la source
1
Ce qui est déjà suggéré dans la réponse du haut par @nik. Pas besoin de dupliquer pour mettre l'accent, il suffit de passer à l'autre réponse ou d'ajouter un commentaire si vous avez quelque chose de substantiel mais que vous ne voulez pas donner une réponse impliquée. ; o)
pbhj