J'ai un fichier .7z contenant ~ 360 000 images dans plusieurs répertoires. Je voudrais le convertir en .tar afin de pouvoir l'ouvrir sur un autre ordinateur. Existe-t-il un meilleur moyen que de l'extraire dans des fichiers et de les compresser à nouveau? Est-il possible de faire la conversion directement?
10
.7z
fichier sur un autre ordinateur?Réponses:
Ce n'est pas trop difficile d'écrire quelque chose pour faire le travail. Voici un exemple de script Perl (nécessite le module Archive :: Libarchive :: XS ).
Si vous vouliez une archive tar.gz / tar.bz2 / tar.xz, ajoutez la ligne
archive_write_add_filter_gzip($out);
ouarchive_write_add_filter_bzip2($out);
ouarchive_tar_add_filter_xz($out);
après laarchive_write_set_format
ligne.Cela n'utilise pas d'espace disque temporaire (juste l'espace pour le fichier tar de sortie) et très peu de RAM (juste quelques Mo pour perl, mais cela fonctionne avec les fichiers un bloc à la fois, donc ce n'est pas un problème si vos fichiers sont plus gros que votre RAM).
la source
.7z
les archives sont des archives souvent compressées avec une sorte d'algorithme, tandis que les.tar
archives ne sont que des archives.Ils diffèrent par leur portée, et dans la plupart des cas, une conversion nécessiterait une décompression facultative toujours suivie d'une extraction de l'archive source. Même si une
.7z
archive n'utilisait aucune compression, elle nécessiterait toujours une extraction.Cela étant dit, si vous vouliez [décompresser] / extraire / rechercher à nouveau l'archive source à la fois, la réponse est que vous ne pouvez pas, du moins ne pas utiliser les outils par défaut d'Ubuntu car
tar
vous ne pouvez pas lirestdin
, vous ne pouvez donc pas diriger7z
ettar
. Quoi qu'il en soit, il est très facile d'automatiser tout en une seule commande:* <path_to_archive> = chemin vers l'
.7z
archive sourceDe plus, le temps nécessaire pour que les fichiers de l'archive source soient écrits sur le disque et pour que les fichiers extraits soient lus afin de [décompresser] / extraire / rechercher à nouveau l'archive source en deux étapes est un goulot d'étranglement pour l'ensemble de la tâche principalement (mais pas uniquement) en raison de la faible vitesse d'E / S d'un disque potentiel, une solution partielle serait donc de stocker les fichiers temporaires sur un disque virtuel afin de presque annuler le goulot d'étranglement global:
sudo mkdir /mnt/tmpfs
sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk
* <tmpfs_size> = taille du système de fichiers en octets * 10 3 (1, 1K, 1M, 1G, ...)mkdir /mnt/tmpfs/tmp && 7z x <path_to_source_archive> -o/mnt/tmpfs/tmp && tar cf archive.tar /mnt/tmpfs/tmp && rm -rf /mnt/tmpfs/tmp
* <path_to_archive> = chemin vers l'.7z
archive sourcesudo umount
sudo rmdir /mnt/tmpfs
la source