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.

wulfgarpro
la source
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
V pour V
la source
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

Alaa Ahmad M. Zakaria
la source
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

Gr4cchus
la source
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
ckroger
la source