Come estraggo con tar in una directory diversa?


18

Questo non funziona:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Non è ovvio per me cosa farebbe oltre a estrarlo e spostare i file.

Risposte:


28

Da man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

cioè, tar xC /foo/bar -f /tmp/foo.tar.gzdovrebbe fare il lavoro. (su FreeBSD, ma GNU tar è sostanzialmente lo stesso in questo senso, vedi "Cambiare la directory di lavoro" nel suo manuale )


4
Consiglio di testare questo comportamento con versioni non tar di tar . La pagina di manuale di Solaris menziona solo questa opzione in combinazione con le operazioni di aggiunta e sostituzione . Essendo curioso l'ho provato con un'operazione di estrazione . Il tar di Solaris non ha emesso alcun errore o avviso ed ha estratto l'archivio nella cartella corrente =: - /
ktf

1
Inoltre non funziona con la versione AIX di tar: 'File -C non presente nell'archivio' - '-C' funziona per la creazione di tarball.
DarkHeart,

È possibile sostituire la directory principale con un nuovo nome?
Tofutim

9

se vuoi estrarre un archivio tar altrove, semplicemente cd nella directory di destinazione e decomprimilo lì:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

Il comando che hai usato avrebbe cercato il file foo/barnell'archivio ed estratto.


9

fare:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

farebbe il lavoro.

Fondamentalmente, ciò che fa è generare una nuova shell (le parentesi), in questa subshell, cambiare directory foo/bare quindi decomprimere il file.

È possibile modificare il ;da a &&per essere sicuri che cdfunzioni bene.


1
Caspita che puoi avviare una shell proprio come quella è abbastanza bella! Non avevo idea che tu potessi farlo.
Kit Sunde,

0
tar -xf ancd.tar.gz my/name/file

puoi dare il nome del file con ./fileafter tar file.

tar -xf ancd.tar.gz ./my/name/file

se funziona significa che hai creato un tar con ./. usa meno comando per vedere il contenuto di tar.

less ...tar.file  

0

Ho riscontrato quello che sembra essere un problema simile e l'ho risolto.

Il problema era nella creazione del file piuttosto che nel file creato.

Durante il tentativo di tarare e trasferire un file in dir A, ho fornito il percorso al file originale nel comando tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Quello che sono stato in grado di fare per risolvere è

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Al trasferimento e l'estrazione del tarball, vengono creati i sottodir richiesti.

tar -xvf MyFile.tar

0

Cambia la directory in cui vuoi estrarre

cd /u02/restore

se la posizione del file di estrazione in /u01/backup.tar allora

Estrai come segue:

cd /u02/restore
tar -xvf /u01/backup.tar

0

Il comando:

tar -xzvf foo.tar.gz -C /home/user/bar/

estrarrà il file di input "foo.tar.gz", nella directory /home/user/bar, durante la stampa dei file elaborati.

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.