Bagaimana cara mengekstrak dengan tar ke direktori lain?

18

Ini tidak berfungsi:

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

Tidak jelas bagi saya apa yang akan dilakukan selain mengekstraksi pada tempatnya dan memindahkan file.

Kit Sunde
sumber

Jawaban:

28

Dari 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.

yaitu, tar xC /foo/bar -f /tmp/foo.tar.gzharus melakukan pekerjaan itu. (pada FreeBSD, tetapi tar GNU pada dasarnya sama dalam hal ini, lihat "Mengubah Direktori Kerja" di manual-nya )

sr_
sumber
4
Saya merekomendasikan untuk menguji perilaku ini dengan versi tar non-GNU . Halaman manual Solaris hanya menyebutkan opsi ini dalam kombinasi operasi tambah dan ganti . Karena penasaran saya sudah mengujinya dengan operasi ekstrak . Solaris' tar tidak tidak mengeluarkan kesalahan atau peringatan dan diekstraksi arsip dalam folder saat ini =: - /
KTF
1
Juga tidak berfungsi pada tar versi AIX: 'File -C tidak ada dalam arsip' - '-C' berfungsi untuk membuat tarbal.
DarkHeart
Apakah mungkin untuk menukar direktori utama dengan nama baru?
tofutim
9

jika Anda ingin mengekstrak arsip tar di tempat lain, cukup cd ke direktori tujuan dan hapus di sana:

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

Perintah yang Anda gunakan akan mencari file foo/bardi arsip dan mengekstraknya.

ktf
sumber
9

Perbuatan:

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

akan melakukan pekerjaan itu.

Pada dasarnya, apa yang dilakukan adalah memunculkan shell baru (tanda kurung), dalam subkulit ini, ubah direktori menjadi foo/bardan kemudian undar file.

Anda dapat mengubah ;dengan a &&untuk memastikan cdberfungsi dengan baik.

jfg956
sumber
1
Wow, kamu bisa memulai shell begitu saja itu keren! Saya tidak tahu Anda bisa melakukan itu.
Kit Sunde
0
tar -xf ancd.tar.gz my/name/file

Anda dapat memberikan nama file dengan ./filefile after tar.

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

jika berfungsi berarti Anda telah membuat tar ./. gunakan lebih sedikit perintah untuk melihat konten tar.

less ...tar.file  
pengguna2761565
sumber
0

Saya bertemu dengan apa yang tampaknya menjadi masalah serupa dan telah menyelesaikannya.

Masalahnya ada pada pembuatan file daripada file yang dibuat.

Ketika mencoba tar dan mentransfer file dalam dir A, saya memberikan path ke file asli di perintah tar

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

Apa yang bisa saya lakukan untuk menyelesaikannya adalah

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

Saat mentransfer dan mengekstrak tarball, subdirat yang diperlukan dibuat.

tar -xvf MyFile.tar
OtM
sumber
0

Ubah direktori tempat Anda ingin mengekstrak

cd /u02/restore

jika lokasi file ekstrak di bawah /u01/backup.tar lalu

Ekstrak sebagai berikut:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
sumber
0

Perintah:

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

akan mengekstrak file input "foo.tar.gz", ke dalam direktori /home/user/bar, saat mencetak file yang diproses.

tzabal
sumber