Créer un répertoire cible lors de l'extraction de l'archive tar


25

Est-il possible de créer un répertoire cible, similaire à mkdir -p, où je peux définir un répertoire cible inexistant dans ma commande tar, et tar créera le répertoire pour moi?

Je sais que je peux rediriger la sortie vers un répertoire en utilisant tar -C /target/dir, mais cela ne fonctionne pas si le répertoire cible est inexistant.


4
Si ce n'est pas possible, vous pouvez toujours créer un alias de shell.
n0pe

Réponses:


38
mkdir -p /target/dir && tar -C /target/dir

3
Pas d'alimentation à la cuillère, droit et précis.
Amado Martinez

10
Changement suggéré mineur:mkdir -p /target/dir && tar -C $_
Mark Melville

@MarkMelville nous décrit ce que $ _ est censé faire d'ici
Suhayb

@Suhayb $_est un paramètre spécial dans Bash qui se développe jusqu'au dernier argument de la commande précédente.
ConceptRat

13
tar -xvf bash.html_node.tar.gz --one-top-level

Depuis la page de manuel de la commande tar

--one-top-level[=DIR]

    Extrayez tous les fichiers dans DIR ou, s'ils sont utilisés sans argument, dans un sous-répertoire nommé par le nom de base de l'archive (moins les suffixes de compression standard reconnaissables par --auto-compress).

----- test

test 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// si nom tgz identique à root_dir de l'archive, aucun autre effet

test 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// si le nom tgz n'est pas le même que root_dir de l'archive, créez un répertoire de niveau supérieur


3
Nécessite GNU tar? Le tar bsd par défaut de Mac n'a pas cette option.
Curtis Yallop

1
Oui, cela devrait être mentionné plus clairement.
kcrisman

5

Cela avait plus de sens pour moi: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdir rend le dossier bien que je ne comprenne pas bien -p commutateur. &&vous permet d'exécuter une deuxième commande. J'ai utilisé des commutateurs tar typiques mais à la fin -Cest utilisé pour changer les répertoires et extraire à cet emplacement nécessaire.

référence: extraire-fichiers-contenus-dans-archive-tar-gz-vers-nouveau-répertoire-nommé-archive


2
Le commutateur -p ne générera pas d'erreur si le répertoire existe déjà.
David

@David créera également tous les principaux répertoires non existants, c'est-à-dire qu'il créera /creates'il n'existe pas.
Antonio Pérez

1

Si vous ne connaissez pas les chemins à créer ...
Obtenez les chemins nécessaires dans le fichier tar, puis créez-les ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.