Création d'une archive tar sans inclure le répertoire parent lorsque les fichiers sont stockés dans différents répertoires

11

J'ai les quatre fichiers suivants dans le système de fichiers:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

J'ai besoin de mettre ces fichiers dans une archive tar, mais je ne veux pas ajouter de répertoires. Le mieux que j'ai pu trouver était:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Ce n'est toujours pas parfait, car chaque fichier dans l'archive est profond de deux répertoires. Y a-t-il une meilleure façon? Ou dois - je simplement copier s1, s2, r3et les r5fichiers dans un répertoire et créer l'archive avec tar -czvf archive.tgz s1 s2 r3 r5?

Martin
la source

Réponses:

17

Vous pouvez utiliser -Cplusieurs fois (passer d'un répertoire à un autre):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Notez que chaque -Coption est interprétée par rapport au répertoire courant à ce point (ou vous pouvez simplement utiliser des chemins absolus).

Stephen Kitt
la source
11

Si vous avez la liste des fichiers dans un fichier, ou si vous pouvez les générer à l'aide d'une commande, vous pouvez utiliser une seule commande tar GNU:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

La transformation conserve toujours les répertoires, mais aplatit complètement la disposition. Vous avez donc besoin d'un moyen de filtrer les répertoires, d'où la nécessité d'une liste de fichiers.

muru
la source
8

Vous pouvez ajouter des fichiers à l'archive un par un:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Vous pouvez créer un script pour le rendre plus facile: pour chaque chemin, exécutez tar rfavec le répertoire de base comme valeur pour le -Cparamètre et le nom de fichier de base sans chemin à ajouter.

janos
la source