web-dev-qa-db-fra.com

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

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

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

29
wulfgarpro
mkdir -p /target/dir && tar -C /target/dir
42
V for V
tar -xvf bash.html_node.tar.gz --one-top-level

De la page man de la commande tar

--one-top-level[=DIR]

    Extraire tous les fichiers dans [~ # ~] dir [~ # ~ ~ ~] ou, s'il est utilisé sans argument, dans un sous-répertoire nommé par le nom de base de l'archive (moins de 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 le nom TGZ est identique à Root_Dir of 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 non identique que root_dir d'archive, créez un DIR de niveau supérieur

18

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

mkdir fait le dossier bien que je ne comprends pas tout à fait le -p changer. && vous permet d'exécuter une deuxième commande. J'ai utilisé des commutateurs de goudron typiques mais à la fin -C est utilisé pour changer de répertoires et extraire à cet endroit nécessaire.

référence: extrayez-les-fichiers-fichiers-contenus-in-archive-gz-to-nouvelle-annuaire-nommé-archive

6
Gr4cchus

Si vous ne connaissez pas les chemins pour créer ...
[.____] Obtenez les chemins nécessaires à partir du 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
1
ckroger