Créer une archive tar depuis un find grâce à cpio

Présentation

cpio est à la fois le nom d'une commande et d'un format d'archivage.Voir manuel http://www.gnu.org/software/cpio/manual/cpio.html

La commande cpio prend aussi en charge d'autre format que cpio, comme par exemple le format ustar.

Tar avec cpio

Utilisez l'option '-depth' à find.

find . -depth | cpio -ov --format=ustar |pigz > archive.tar.gz # Équivalent ? find . -depth | xargs tar czf archive.tar.gz find . -exec tar rvf archive.tar "{}" \;

'-depth' pas nécessaire si votre find ne retourne pas de répertoire. Comme avec l'option '-type f' par exemple

find . -type f |cpio -ov --format=ustar |pigz > archive.tar.gz

Si vous avez des noms de fichiers avec des espaces et des caractères bizarres

find . -depth -print0 |cpio -0 -ov --format=ustar |pigz > archive.tar.gz

Il est également possible de créer un tarball depuis un find (ou un ls) avec Pax qui est à privilégier.Cependant contrairement à pax, cpio est livré par défaut dans la plupart des distributions.

Voir Pax

Limitation

Le format d'archive défini par la norme POSIX.1-1988 appelé ustar est très portable. Mais en revanche, il est assez limité.

Taille max de l'archive : 8GB

Taille max nom de fichier : 256 caractères grand max (souvent moins)

Taille max nom lien symbolique : 100 caractères

Voir détails http://www.gnu.org/software/tar/manual/html_section/tar_68.html

Exemple en pratique

debian_conflit_2paquet_meme_fichier

Autre CPIO

find . -mount -print | cpio -pdm /mnt/newhost-disk

Autre

Avec Tar

tar -cvf allfiles.tar -T mylist.txt