Cpio
| Fiche express | |
|---|---|
| Domaine | Archivage de fichiers |
| Commande | cpio
|
| Contexte | Reçoit la liste des chemins à traiter sur son entrée standard (généralement produite par Find) |
| Modes | -o copy-out (créer), -i copy-in (extraire), -p copy-pass (copier sans archive)
|
| Voir aussi | Tar (archivage simple d'un répertoire entier) |
cpio (copy in/out) archive des fichiers dont il reçoit la liste des chemins sur son entrée standard, au lieu de les recevoir en arguments. Contrairement à tar, qui prend directement des chemins en paramètre, cpio se combine donc systématiquement avec find (ou toute autre commande capable de produire une liste de chemins) pour sélectionner les fichiers à traiter.
Les trois modes
cpio fonctionne selon trois modes exclusifs, choisis par l'option principale :
-o(copy-out) — lit une liste de chemins sur stdin et écrit une archive sur stdout.-i(copy-in) — lit une archive sur stdin et en extrait les fichiers dans le répertoire courant.-p(copy-pass) — lit une liste de chemins sur stdin et copie directement les fichiers vers un répertoire de destination, sans créer de fichier d'archive intermédiaire.
Créer une archive (copy-out)
find . -print | cpio -ocv | gzip > archive.cpio.gz
find . -printfournit la liste des chemins de l'arborescence courante.-opasse cpio en mode copy-out (création d'archive).-cutilise un format d'en-tête portable (ASCII, indépendant de l'architecture).-vaffiche chaque fichier traité (verbeux).- la sortie de cpio est un flux non compressé, redirigé vers
gzippour produire l'archive compressée finale.
Lister le contenu d'une archive
cpio -it < archive.cpio # lister sans extraire
zcat archive.cpio.gz | cpio -it # idem pour une archive compressée
L'option -t demande à cpio d'afficher la table des fichiers de l'archive au lieu de les extraire — à combiner avec -i (copy-in) puisqu'on lit une archive existante.
Restaurer une archive (copy-in)
cpio -i < archive.cpio # extraire dans le répertoire courant
cpio -ivd < archive.cpio # verbeux, recrée les répertoires manquants
zcat archive.cpio.gz | cpio -iuvdm # extraire une archive compressée
Options utiles en extraction : -d crée les répertoires nécessaires s'ils n'existent pas encore, -u force l'écrasement des fichiers déjà présents (sans -u, cpio ne les remplace pas), -m conserve la date de modification d'origine des fichiers.
Copier directement sans archive (copy-pass)
Le mode -p combine en une seule étape la sélection des fichiers et leur copie vers un autre répertoire, sans jamais écrire d'archive sur le disque :
find . -depth -print | cpio -pvdm /chemin/destination
Utile pour dupliquer une arborescence en conservant les métadonnées (dates, avec -m) sans passer par une étape d'archivage/désarchivage — par exemple pour migrer un répertoire vers un autre point de montage.
cpio face à tar
- Sélection des fichiers — cpio ne connaît que ce qu'on lui donne sur stdin : combiné à find, il permet des sélections fines (par nom, date, taille, profondeur…) qu'il faudrait sinon transmettre à tar via des options dédiées ou un fichier de liste. tar reste plus direct pour archiver un répertoire entier, puisqu'il prend les chemins directement en argument.
- Copie sans archive — le mode copy-pass (
-p) de cpio copie une sélection de fichiers vers un autre répertoire sans étape d'archivage intermédiaire, ce que tar ne propose pas nativement. - Usage courant — tar est généralement préféré pour des sauvegardes classiques (simplicité), cpio pour des sélections de fichiers complexes ou des transferts ciblés.