Erstellen Sie ein Zielverzeichnis, wenn Sie Tarball extrahieren

25

Ist es möglich, ein Zielverzeichnis zu erstellen, ähnlich dem mkdir -p, in dem ich ein nicht vorhandenes Zielverzeichnis in meinem Befehl tar definieren kann und tar das Verzeichnis für mich erstellt?

Ich weiß, dass ich die Ausgabe mithilfe von in ein Verzeichnis umleiten kann tar -C /target/dir, aber dies funktioniert nicht, wenn das Zielverzeichnis nicht vorhanden ist.

wulfgarpro
quelle
4
Wenn dies nicht möglich ist, können Sie immer einen Shell-Alias ​​erstellen.
Nr.

Antworten:

38
mkdir -p /target/dir && tar -C /target/dir
V für V
quelle
3
Kein Löffelfutter, gerade und auf den Punkt.
Amado Martinez
10
Kleinere Änderungsvorschläge:mkdir -p /target/dir && tar -C $_
Mark Melville
@ MarkMelville beschreiben Sie uns, was $ _ hier de soll
Suhayb
@Suhayb $_ist ein spezieller Parameter in Bash, der bis zum letzten Argument des vorherigen Befehls erweitert wird.
ConceptRat
12
tar -xvf bash.html_node.tar.gz --one-top-level

Aus der Manpage des Befehls tar

--one-top-level[=DIR]

    Extrahieren Sie alle Dateien in DIR oder, wenn sie ohne Argument verwendet werden, in ein Unterverzeichnis, das durch den Basisnamen des Archivs benannt ist (abzüglich der durch erkennbaren Standardkomprimierungssuffixe --auto-compress).

----- Prüfung

Test 1

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

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

// Wenn der TGZ-Name mit root_dir des Archivs identisch ist, hat dies keine weiteren Auswirkungen

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

// Wenn der TGZ-Name nicht mit dem Stammverzeichnis des Archivs übereinstimmt, erstellen Sie ein Verzeichnis der obersten Ebene

Alaa Ahmad M. Zakaria
quelle
3
Benötigt GNU tar? Mac-Standard-BSD-TAR hat diese Option nicht.
Curtis Yallop
1
Ja, dies sollte deutlicher erwähnt werden.
kcrisman
5

Das ergab für mich mehr Sinn: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirmacht den ordner obwohl ich den -pschalter nicht ganz verstehe . &&lässt Sie einen zweiten Befehl ausführen. Ich habe typische tar-Schalter verwendet, aber am Ende -Cwird verwendet, um die Verzeichnisse zu wechseln und an den gewünschten Ort zu extrahieren.

referenz: dateien extrahieren, die in archive tar gz to new directory named archive enthalten sind

Gr4cchus
quelle
2
Die Option -p gibt keinen Fehler aus, wenn das Verzeichnis bereits vorhanden ist.
David
@David erstellt auch alle führenden nicht existierenden Verzeichnisse, dh es wird erstellt, /createwenn es nicht existiert.
Antonio Pérez
1

Wenn Sie die zu erstellenden Pfade nicht kennen ...
Holen Sie sich die erforderlichen Pfade aus der TAR-Datei und erstellen Sie sie ...

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
quelle