Ceci est une ancienne révision du document !
Archivage et compression de fichiers
En informatique, une archive est un fichier compressé qui peut contenir plusieurs fichiers et répertoires. Les archives sont généralement des fichiers portant l'extension .tar (format UNIX) ou .zip (sous windows) et ceux ci sont également souvent compressés.
Cette page présente les différents formats d'archives rencontrés sous Ubuntu ainsi que les différentes façons de les créer, de les extraire ou de les lire.
Présentation
Sous Ubuntu, un seul logiciel graphique ou plusieurs petits utilitaires en ligne de commande permettent de gérer tous les formats d'archives. Par contre, seuls certains formats sont installés « de base » sur le système.
Pour extraire ou créer des archives compressées, vous devrez donc avoir installé le support du format voulu sur votre système.
Gestion des archives
Pour chaque format d'archives décrit ci-dessous, vous trouverez les paquets à installer pour obtenir le support du format sur votre système. Il suffit d'installer le paquet en question pour pouvoir utiliser ces archives graphiquement ou en ligne de commande.
Graphiquement
- file-roller - gestionnaire d'archives (clone de WinZip), présent par défaut dans Ubuntu.
- ark - ark est le gestionnaire d'archives présent par défaut dans Kubuntu.
- Xarchiver - gestionnaire d'archives léger, présent par défaut dans Xubuntu.
- 7-Zip - Logiciel libre d’archivage de fichiers avec un fort taux de compression (ligne de commande).
- tar (ligne de commande) compatible avec les formats *.tar.gz
En ligne de commande
Chaque format d'archive a un utilitaire en ligne de commande permettant de créer ou d'extraire des archives.
Vous trouverez ci-dessous les commandes permettant de gérer chaque format.
Formats libres
Pour tous les formats à base de Tar, vous verrez que les options de tar sont les mêmes :
- c : crée l'archive ;
- x : extrait l'archive ;
- f : utilise le fichier donné en paramètre ;
- v : active le mode « verbeux » (bavard, affiche ce qu'il fait).
Puis selon la compression souhaitée :
- z : ajoute la compression Gzip ;
- j : ajoute la compression Bzip2.
GNU Tar (.tar)
L'archive Tar est un vieux format, créé pour les bandes magnétiques, qui consiste à ajouter des fichiers à un seul, l'un après l'autre. Ce n'est pas un format de compression mais juste une façon d'archiver plusieurs fichiers dans un seul.
Ce format est géré nativement par Ubuntu. La seule commande à utiliser est tar.
Création
tar -cvf votre_archive.tar fichier1 fichier2 fichier3 /dossier1 /dossier2
Extraction
tar -xvf votre_archive.tar
GNU Tar GZ (.tar.gz ou .tgz)
Ces archives sont des archives Tar compressées avec Gzip, un utilitaire de compression libre.
La compression Gzip est gérée nativement par Ubuntu. On peut compresser une archive « .tar » en « .tar.gz » avec gzip et décompresser un « .tar.gz » en « .tar » avec gunzip, mais la méthode la plus rapide est de compresser et décompresser directement avec tar.
Remarque : On rencontre parfois l'extension « .tgz » au lieu de « .tar.gz ».
Création
tar -zcvf votre_archive.tar.gz votre_dossier/
Extraction
tar -zxvf votre_archive.tar.gz
GNU Tar Bzip2 (.tar.bz2)
Ces archives sont des archives Tar compressées avec Bzip2, un utilitaire de compression libre plus puissant que Gzip. Bzip2 crée des fichiers beaucoup plus petits mais utilise plus de ressources processeur surtout pour compresser.
Pour utiliser le format « .bz2 », installez les paquets bzip2 et bunzip2.
Remarque : On rencontre parfois l'extension « .tbz2 » au lieu de « .tar.bz2 ».
Création
tar -jcvf votre_archive.tar.bz2 votre_dossier/
Extraction
tar -jxvf votre_archive.tar.bz2
7zip (.7z)
Les archives 7-zip sont relativement récentes et offrent un excellent taux de compression. De plus, les noms de fichiers des archives 7-zip étant stockées en Unicode, les archives 7-zip sont pleinement compatibles entre Windows et Linux au niveau des fichiers contenant des caractères accentués.
Pour utiliser le format « .7z », vous pouvez installez le paquet p7zip et/ou p7zip-full (selon les formats que vous voulez gérer ; cf tableau ci-dessous) disponibles tous deux dans les dépôts Universe.
Le paquet | contient | et gère |
---|---|---|
p7zip | p7zip, 7zr | 7z |
p7zip-full | 7z, 7za | 7z, zip, Zip64, cab, rar, arj, gz, bz2, tar, cpio, rpm, iso (image disque), deb |
Création
Selon le paquet installé :
7z a votre_archive.7z dossier/
ou
7za a votre_archive.7z dossier/
ou
7zr a votre_archive.7z dossier/
Extraction
Selon le paquet installé :
7z x votre_archive.7z
ou
7za x votre_archive.7z
ou
7zr x votre_archive.7z
ou
p7zip -d votre_archive.7z
Formats non libres
Zip (.zip)
Zip est un vieux format d'archives, tirant son origine de PKZip, développé par Phil Katz en 1989. Il a été utilisé pendant de nombreuses années sous DOS et Windows.
Le format « .zip » est supporté nativement dans Ubuntu. On utilise alors les commandes zip et unzip.
Création
zip votre_archive.zip [liste des fichiers] zip -r votre_archive.zip [dossier]
zip -e votre_archive.zip [liste des fichiers]
chiffre le zip et demande un mot de passe.
Extraction
unzip votre_archive.zip
WinRAR (.rar)
Le format RAR a été inventé par Eugene Roshal. Il en a publié le code source de façon à pouvoir les extraire « librement » (avec un logiciel libre).
Les avantages du format « .rar » sont sa capacité de créer des archives découpées en plusieurs parties et sa possibilité de chiffrer les archives (protégées par un mot de passe).
Il existe un utilitaire libre pour le format RAR mais il ne supporte pas les dernières archives RAR (version 3). Pour extraire ces archives, il faudra utiliser la version non libre de UnRar.
Vous pouvez donc installer le paquet unrar-free des dépôts Universe si vous voulez la version libre ou le paquet unrar des dépôts Multiverse pour la version non libre, ainsi que le paquet rar des dépôts Multiverse.
Création
rar a votre_archive.rar [liste des fichiers]
Extraction
unrar x votre_archive.rar
Si l'archive est protégée par un mot de passe, il vous sera demandé et ce sur chaque partie (si l'archive est découpée en plusieurs parties). Pour éviter ce problème
unrar x -pvotre_mot_de_passe votre_archive.rar
A noter que la commande n'a pas d'erreur de syntaxe : le mot de passe qui est ici "votre_mot_de_passe" est bien accolé au commutateur "-p".
Momo Astuce pour les .rar renomer en .zip et 7zip les ouvriras.
Remarque : pour la version ubuntu 9.04 amd64, l'installation du package unrar-free, version libre, entraine des erreurs lors de l'extraction d'un .rar; problème résolu en installant le package unrar version non libre
Ace (.ace)
Le format d'archives Ace n'est plus beaucoup utilisé. Toutefois, si vous voulez l'utiliser, vous pouvez installer le paquet unace des dépôts Universe.
Extraction
unace x votre_archive.ace
Si lors de l'extraction d'une archive « .ace », vous obtenez un message du genre :
File compressed with unknown method. Decompression not possible.
Il vous faut la dernière version (2.5).
Installation de la version 2.5
Xtremsplit (.xtm)
Xtremsplit un format d'archivage propriétaire (et sans compression comme tar) : crée dans le but de découper des fichiers.
Astuce pour terminal
Script extract
Le script suivant permet de décompresser un large éventail de types de fichiers compressés. Il vous suffira juste de taper quelque soit le type d'archive :
extract <fichier>
Ajoutez la fonction dans ~/.Bashrc :
extract () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xvjf $1 ;; *.tar.gz) tar xvzf $1 ;; *.tar.xz) tar xvJf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xvf $1 ;; *.tbz2) tar xvjf $1 ;; *.tgz) tar xvzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *.xz) unxz $1 ;; *.exe) cabextract $1 ;; *) echo "\`$1': unrecognized file compression" ;; esac else echo "\`$1' is not a valid file" fi }
Marche à suivre en cas d'archive corrompue
Vous voulez extraire une archive et vous obtenez une erreur du type
bzip2: Data integrity error when decompressing. Input file = (stdin), output file = (stdout) It is possible that the compressed file(s) have become corrupted. You can use the -tvv option to test integrity of such files. You can use the `bzip2recover' program to *attempt* to recover data from undamaged sections of corrupted files. tar: 56 garbage bytes ignored at end of archive tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now
Et bien vous avez vraiment pas de chance ! Votre archive est certainement corrompue. Avec le gestionnaire d'archive vous récupérez la première partie de l'archive, à savoir toutes les données avant l'erreur dans le fichier.
Pour récupérer la suite taper
bzip2recover nomdelarchive.tar.bz2
Vous obtiendrez une multitude de fichier (de l'ordre de 6000 fichiers pour une archive de 3 Go) Ces fichiers se nomment rec00001nomdelarchive.tar et ainsi de suite.
Ensuite il faut tester chacun des fichiers, pour cela taper
bunzip rec*bz2
Si vous avez un retour "d'argument trop long" dans le terminal essayer par tranche de 1000 (ex: rec01*bz2 puis rec02*bz2 …) si cela est encore trop long, envisager la commande xargs
Vous allez obtenir le nom du fichier corrompu (ex rec003776nomdelarchive.tar) et bien déplacer ce fichier ainsi que ceux situer avant pour n'avoir que les fichiers suivant le fichier corrompu.
Ensuite reconstruisez la suite des fichiers en tapant
cat rec0* > findelarchvie.tar
Récupérer le script ici http://oss.bestsolution.at/documents/find_tar_headers.pl.bz2 qui permet de retrouver les marques d'en-tête, et exécutez-le en tapant:
perl find_tar_headers.pl findelarchive.tar
Une fois lancé, vous pouvez l'arrêter en tapant control + C et repérer les chiffres mentionnés
findelarchive.tar:17185:top/secret/warp_reactor.so:157106 findelarchive.tar:75041:top/secret/kernel_injectors.so:153125 findelarchive.tar:130849:top/secret/dampening_fields.so:145746 findelarchive.tar:183585:top/secret/plasma_controls.so:157035
Le nombre à repérer est celui de la première ligne, dans ce cas il s'agit de 17185
Reconstruisez correctement l'archive en tapant
tail -c +17185 findelarchive.tar > bonnearchive.tar
Évidemment mettez le bon chiffre à la place de 17185
Voilà vous n'avez plus qu'a décompresser la dernière archive ainsi obtenu.
(inspiré de cet article http://oss.bestsolution.at/bash/repair_tar_archives.html.en)