Cpio

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 . -print fournit la liste des chemins de l'arborescence courante.
  • -o passe cpio en mode copy-out (création d'archive).
  • -c utilise un format d'en-tête portable (ASCII, indépendant de l'architecture).
  • -v affiche chaque fichier traité (verbeux).
  • la sortie de cpio est un flux non compressé, redirigé vers gzip pour 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.

Voir aussi

  • Find — fournit la liste des chemins consommée par cpio
  • Tar — alternative plus simple pour archiver un répertoire entier