web-dev-qa-db-fra.com

Fichiers .tar sans structure de répertoire

Je suis .taring certains fichiers avec le chemin example/super_user/Output.*.

Le .tar résultant ressemble à ceci:

+ example
    + super_user
          - Output.Zip
          - Output.xml
          - Output.txt

Mais je veux que le fichier soit comme suit:

- Output.Zip
- Output.xml
- Output.txt

Savez-vous comment je peux y arriver tout en étant dans un autre répertoire?

30
user36938

tar préservera la structure des fichiers et des dossiers, je ne pense donc pas qu'il soit possible de demander à tar d'aplatir la hiérarchie au moment de la création.

Une solution consiste à changer temporairement de répertoire, à créer le fichier tar, puis à revenir en arrière - voici un exemple rapide:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..
11
Gaff

Si le répertoire 'exemple' est à la racine du système de fichiers, voici une autre méthode:

tar -C /example/super_user -cvf result.tar .

cela changera de répertoire au point où vous voulez faire le goudron. La mise en garde est que s'il existe des sous-répertoires sous/example/super_user, la structure de répertoires sera préservée pour ces sous-répertoires.

24
Anthony Walters

J'ai posté ma réponse ici:

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

republier (pour les paresseux)


C'est moche ... mais ça marche ...

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

c'est l'expression:

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

C'est la dernière commande:

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

9
Alessio Valentini

Pour créer un fichier tar (ARCHIVE.tar) avec tous les fichiers d'un répertoire (DIR), sans aucune information sur le répertoire parent (pas même ./), 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 recherche pour limiter la profondeur, sélectionner des fichiers spécifiques et bien d’autres choses.

Bonne chance!

6
Paul Bhullar

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

3
mzwt

S'il s'agit de l'intégralité du contenu de l'archive, vous pouvez utiliser l'option --strip-components de GNU tar pour supprimer les 2 niveaux précédant les fichiers.

1

Un autre moyen de changer temporairement de répertoire consiste à placer les commandes cd et tar entre parenthèses ():

(cd example/super_user; tar -cvf ../../result.tar *)

L'avantage de ceci est que vous retournerez implicitement dans le répertoire d'origine une fois le blocage effectué. c'est-à-dire qu'il n'est pas nécessaire de bloquer pushd .. popd ou de garder une trace de l'endroit où cd retourne.

1
Stephen Quan
pushd example/super_user
tar -cf output.tar Output.*
popd

pushd pousse le chemin du répertoire actuel vers la pile DIR et se déplace vers le dossier de contenu. Ensuite, vous revenez au répertoire d'origine à l'aide de popd.

0
Saravana Kumar