Crea directory di destinazione durante l'estrazione di tarball


25

È possibile creare una directory di destinazione, simile a mkdir -p, dove posso definire una directory di destinazione inesistente all'interno del mio comando tar, e tar creerà la directory per me?

So che posso reindirizzare l'output su una directory usando tar -C /target/dir, ma questo non funziona se la directory di destinazione è inesistente.


4
Se non è possibile, è sempre possibile creare un alias di shell.
n0pe

Risposte:


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

3
Nessun allattamento, dritto e al punto.
Amado Martinez,

10
Modifica suggerita minore:mkdir -p /target/dir && tar -C $_
Mark Melville,

@MarkMelville ci descrive ciò che $ _ dovrebbe de qui
Suhayb il

@Suhayb $_è un parametro speciale in Bash che si espande fino all'ultimo argomento al comando precedente.
ConceptRat

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

Dalla pagina man del comando tar

--one-top-level[=DIR]

    Estrarre tutti i file in DIR o, se utilizzato senza argomenti, in una sottodirectory denominata dal nome di base dell'archivio (meno i suffissi di compressione standard riconoscibili per --auto-compress).

----- test

test 1

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

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

// se il nome tgz è uguale a root_dir dell'archivio, nessun altro effetto

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

// se il nome tgz non è uguale al root_dir dell'archivio, creare una directory di livello superiore


3
Richiede tar GNU? Mac predefinito bsd tar non ha questa opzione.
Curtis Yallop,

1
Sì, questo dovrebbe essere menzionato più chiaramente.
kcrisman,

5

Questo ha avuto più senso per me: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirrende la cartella anche se non capisco bene il -ppassaggio. &&ti permette di eseguire un secondo comando. Ho usato i tar switch tipici ma alla fine -Cè usato per cambiare directory ed estrarre in quella posizione necessaria.

riferimento: estrai-file-contenuto-in-archivio-tar-gz-in-nuova-directory-nome-archivio


2
L'opzione -p non genererà un errore se la directory esiste già.
David,

@David creerà anche tutte le principali directory inesistenti, cioè creerà /createse non esiste.
Antonio Pérez,

1

Se non conosci i percorsi da creare ...
Ottieni i percorsi necessari dal file tar, quindi creali ...

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.