Je suis .tar
ing 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?
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 ../..
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.
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
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!
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é.
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.
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.
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
.