43 votes

.fichiers .tar sans structure de répertoire

Je suis en train de compresser quelques fichiers avec le chemin exemple/super_utilisateur/Output.*.

Le fichier compressé .tar ressemble à ceci :

+ exemple
    + super_utilisateur
          - Output.zip
          - Output.xml
          - Output.txt

Mais je veux que le fichier ressemble à ceci :

- Output.zip
- Output.xml
- Output.txt

Sais-tu comment je peux y parvenir tout en restant dans un autre répertoire ?

44voto

Pasa Game Points 1

Si le répertoire 'exemple' se trouve à la racine du système de fichiers, voici une autre façon :

tar -C /exemple/super_utilisateur -cvf resultat.tar .

cela va changer de répertoire jusqu'au point où vous voulez faire le tar. L'inconvénient est que s'il y a des sous-répertoires sous /exemple/super_utilisateur, la structure du répertoire sera conservée pour ces sous-répertoires.

17voto

Alessio Valentini Points 271

J'ai publié ma réponse ici :

https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure

republier (pour les paresseux)


C'est laid... mais ça fonctionne...

J'avais le même problème mais avec plusieurs dossiers, je voulais juste aplatir tous les fichiers. Vous pouvez utiliser l'option "transform" pour passer une expression sed et... cela fonctionne comme prévu.

voici l'expression :

's/.*\///g' (supprimer tout avant '/')

Voici la commande finale :

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info

13voto

Gaff Points 17889

Tar conservera la structure des fichiers et des dossiers, donc je ne pense pas qu'il y ait de moyen d'instruire tar pour aplatir la hiérarchie au moment de la création.

Un contournement consiste à changer temporairement de répertoire, à créer le fichier tar, puis à revenir en arrière - un exemple rapide ci-dessous :

cd exemple/super_utilisateur && tar -cvf ../../resultat.tar Output.* && cd ../..

9voto

Janneman Points 81

Pour créer un tar (ARCHIVE.tar) avec tous les fichiers d'un répertoire (DIR), sans aucune information sur le répertoire parent (même pas ./), vous pouvez utiliser quelque chose comme :

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"

Vous pouvez jouer avec la commande find pour limiter la profondeur, sélectionner des fichiers spécifiques, et bien d'autres choses.

Bonne chance !

3voto

mzwt Points 31

J'ai créé un répertoire temporaire. Et dans le répertoire, j'ai créé des liens symboliques vers tous les fichiers à inclure. Ensuite, j'ai utilisé la commande tar -h -C . pour que tous les fichiers (pas les liens, mais leur contenu) soient inclus dans l'archive avec le nom souhaité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X