J'utilise .tar
des fichiers avec le chemin example/super_user/Output.*
.
Le résultat .tar
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 parvenir tout en étant dans un autre répertoire?
unix
compression
tar
Der Hochstapler
la source
la source
Réponses:
tar conservera la structure des fichiers et des dossiers, donc je ne pense pas qu'il y ait moyen de demander à tar d'aplatir la hiérarchie au moment de la création.
Une solution de contournement consiste à changer temporairement de répertoire, à créer le tar, puis à revenir en arrière - un exemple rapide ci-dessous:
la source
Si le répertoire 'exemple' est à la racine du système de fichiers, voici une autre façon:
cela changera de répertoire au point où vous voulez faire le tar. La mise en garde est que s'il y a des sous-répertoires sous / example / super_user, la structure du répertoire sera préservée pour ces sous-répertoires.
la source
/home/u/foo/bar
, dir dir./home/b
,tar -C foo/bar -cvf qiz.tar .
Fonctionne bien. Une mise en garde cependant, c'est que vous ne pouvez pas utiliser de caractères génériques, c'esttar -C foo/bar -cvf qiz.tar *.log
-à- dire ,tar -C foo/bar -cvf qiz.tar "*.log"
outar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
ne fonctionnera pas.-C
plusieurs fois dans une seuletar
commande si vous devez ajouter plusieurs fichiers répartis sur plusieurs répertoires tout en souhaitant que le fichier tar soit plat.J'ai posté ma réponse ici:
/programming/13924856/unix-tar-do-not-preserve-directory-structure
republier (pour ppl paresseux)
C'est moche ... mais ça marche ...
J'ai eu ce même problème mais avec plusieurs dossiers, je voulais juste éliminer 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'
(supprimez tout avant '/')Ceci est la commande finale:
la source
Pour créer un tar (ARCHIVE.tar) avec tous les fichiers d'un répertoire (DIR), sans aucune information du répertoire parent (pas même ./), vous pouvez utiliser quelque chose comme:
Vous pouvez jouer avec la recherche pour limiter la profondeur, sélectionner des fichiers spécifiques et bien d'autres choses.
Bonne chance!
la source
-printf
est une commande non standard. Beaucoup d'entre eux ne fonctionnent qu'avec des versions spécifiques de find. Habituellement, nous les marquons lorsque nous répondons à une question sur Super User (par exemple avec "-blah est une extension Gnu et ne fonctionnera pas partout").J'ai créé un répertoire temporaire. Et dans le répertoire, créé des liens symboliques vers tous les fichiers vers les fichiers à inclure. Ensuite, j'ai fait tar -h -C. afin que tous les fichiers (pas les liens, mais leur contenu) soient inclus dans l'archive avec le nom souhaité.
la source
S'il s'agit du contenu entier de l'archive tar, vous pouvez utiliser l'
--strip-components
option de GNU tar pour supprimer les 2 niveaux avant les fichiers.la source
--strip-path
mais son utilisation ne changera rien.Une autre façon de modifier temporairement le répertoire est de mettre les commandes
cd
ettar
entre parenthèses(
)
:L'avantage de ceci est que vous reviendrez toujours implicitement dans le répertoire d'origine lorsque le bloc sera terminé. c'est-à-dire pas besoin de
pushd
..popd
blocs ou de garder une trace de l'endroit oùcd
revenir.la source
pushd pousse le chemin du répertoire actuel vers la
DIR
pile et se déplace vers le dossier de contenu. Ensuite, vous revenez au répertoire d'origine à l'aide depopd
.la source