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.

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 )


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.


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.


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  

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

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.