Empaquetage et compression de fichiers

LinuxBeginner
Pratiquer maintenant

Introduction

L’empaquetage et la compression répondent à des besoins proches, mais différents. Une archive regroupe une arborescence de répertoires dans un seul flux de données, tout en conservant les noms et la structure. La compression représente les données de manière plus compacte. Un fichier .tar est une archive ; un fichier .gz contient des données compressées avec gzip ; un fichier .tar.gz est une archive tar compressée avec gzip.

Vous allez créer un petit projet, produire chaque format, inspecter une archive avant son extraction, restaurer son contenu dans un répertoire distinct, puis comparer les données restaurées avec les données sources. Ce flux de travail — inspecter, extraire, vérifier — évite d’écraser les fichiers d’origine sans contrôle.

Créer une arborescence de répertoires à préserver

Dans cette étape, vous allez créer une petite arborescence source et noter les éléments qui doivent rester intacts après l’empaquetage et l’extraction.

Créez les répertoires de configuration, de notes et de données :

cd /home/labex/project/archive-lab
mkdir -p source/{config,notes,data}

Écrivez trois fichiers contenant chacun des données distinctes :

printf 'mode=training\nport=8080\n' > source/config/app.conf
printf 'Archive the complete project tree.\n' > source/notes/README.txt
printf 'alpha,beta,gamma\n1,2,3\n' > source/data/sample.csv

Utilisez find pour afficher les fichiers ordinaires avec un chemin relatif au répertoire source :

find source -type f -printf '%P\n' | sort

Créer et inspecter une archive tar

Dans cette étape, vous allez empaqueter l’arborescence source sans compression, puis inspecter les noms de ses membres.

Les principales lettres d’opération de tar sont c pour créer, t pour lister, x pour extraire et f pour indiquer le nom du fichier d’archive. Utilisez -C pour modifier le répertoire de travail de tar avant d’ajouter source. Cela évite d’enregistrer un long chemin absolu :

cd /home/labex/project/archive-lab
tar -cf project.tar -C /home/labex/project/archive-lab source

L’arborescence source existe toujours, car la création d’une archive la lit sans la déplacer. Inspectez l’archive ainsi qu’un fichier d’origine :

ls -lh project.tar
ls -l source/config/app.conf

Listez les membres avant l’extraction :

tar -tf project.tar > tar-members.txt
cat tar-members.txt

Chaque membre doit commencer par source/ et ne doit pas commencer par /. Des noms de membres relatifs rendent la restauration plus sûre et portable.

Extraire en toute sécurité et comparer le résultat

Dans cette étape, vous allez extraire l’archive dans une destination vide plutôt que par-dessus la source, puis comparer les deux arborescences.

Créez un répertoire de restauration et utilisez -C pour définir la destination de l’extraction :

cd /home/labex/project/archive-lab
mkdir tar-restore
tar -xf project.tar -C tar-restore

Inspectez les chemins restaurés :

find tar-restore -type f -printf '%P\n' | sort

Effectuez une comparaison récursive. diff -r n’affiche rien et se termine avec succès lorsque les deux arborescences sont identiques :

diff -r source tar-restore/source
echo "tar restore matches source" > tar-restore-ok.txt
cat tar-restore-ok.txt

Compresser et décompresser un fichier avec Gzip

Dans cette étape, vous allez voir en quoi gzip diffère d’une archive en opérant sur un seul fichier ordinaire.

Copiez un fichier afin de laisser l’arborescence source intacte, puis compressez la copie :

cd /home/labex/project/archive-lab
cp source/data/sample.csv sample-copy.csv
gzip sample-copy.csv

Par défaut, gzip remplace le fichier d’entrée par sample-copy.csv.gz :

ls -lh sample-copy.csv.gz
file sample-copy.csv.gz

Décompressez le fichier, puis comparez son contenu avec celui de l’original :

gunzip sample-copy.csv.gz
cmp source/data/sample.csv sample-copy.csv
echo "gzip round trip matches" > gzip-round-trip-ok.txt
cat gzip-round-trip-ok.txt

Gzip n’empaquette pas directement une arborescence de répertoires ; c’est tar qui fournit cette structure.

Créer et restaurer une archive tar compressée

Dans cette étape, vous allez combiner l’empaquetage avec tar et la compression avec gzip. L’option z indique à tar de transmettre les données de l’archive à gzip.

Créez project.tar.gz, puis inspectez son contenu avec les options -tzf correspondantes :

cd /home/labex/project/archive-lab
tar -czf project.tar.gz -C /home/labex/project/archive-lab source
tar -tzf project.tar.gz > targz-members.txt
cat targz-members.txt

Extrayez l’archive dans une destination distincte, puis vérifiez l’arborescence :

mkdir targz-restore
tar -xzf project.tar.gz -C targz-restore
diff -r source targz-restore/source
echo "tar.gz restore matches source" > targz-restore-ok.txt
cat targz-restore-ok.txt

Les extensions indiquent le format aux utilisateurs et aux outils : .tar.gz désigne clairement une archive tar compressée avec gzip.

Échanger le projet sous forme d’archive Zip

Dans cette étape, vous allez créer et inspecter une archive Zip, un format courant sous Linux, macOS et Windows.

zip -r ajoute récursivement une arborescence de répertoires. Exécutez la commande depuis la racine du laboratoire afin que les chemins enregistrés commencent par source/ :

cd /home/labex/project/archive-lab
zip -r project.zip source

Listez les membres sans extraire l’archive :

unzip -l project.zip

Utilisez -d pour choisir une destination distincte, puis comparez le résultat :

unzip -q project.zip -d zip-restore
diff -r source zip-restore/source
echo "zip restore matches source" > zip-restore-ok.txt
cat zip-restore-ok.txt

Résumé

Vous avez séparé l’empaquetage de la compression, créé et listé des archives tar, effectué une opération aller-retour avec gzip, combiné les deux opérations dans un fichier .tar.gz, puis échangé la même arborescence avec Zip. Surtout, vous avez restauré les données dans des répertoires distincts et comparé leur contenu, au lieu de supposer que la création de l’archive suffisait.