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.

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.

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.

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

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.

Nous préconisons l'utilisation d'un format d'archivage libre et ayant un intérêt concret. Vous pouvez compresser, couper, et sécuriser vos fichiers également avec tous les autres formats.

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
}

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)

  • archivage.1273873489.txt.gz
  • Dernière modification: Le 14/05/2010, 23:44
  • par vikin