Bagaimana cara mengekstrak file ke direktori lain menggunakan perintah 'tar'?

Saya pikir tar archive.tar /users/mylocation akan berhasil, tapi tidak. / bagaimana aku bisa melakukannya?

Untuk mengekstrak arsip ke direktori yang berbeda dari saat ini, gunakan -C, atau --directory, opsi tar, seperti pada

tar -xf archive.tar -C /target/directory

Perhatikan bahwa direktori target harus ada sebelum menjalankan perintah itu (dapat dibuat oleh mkdir /target/directory).

Baca halaman buku panduan (perintah: man tar) untuk opsi lain.

Perhatikan bahwa jika tarball Anda sudah berisi nama direktori yang ingin Anda ubah, tambahkan --strip-components=1 opsi:

tar xf archive.tar -C /target/directory --strip-components=1

Menggabungkan jawaban dan komentar sebelumnya:

Untuk hanya mengekstrak isi dan membuat direktori target jika hilang:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Untuk mengekstrak dan juga menghapus direktori root(tingkat pertama) di zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

Pilihan lainnya adalah menggunakan -- one-top-level. Ini akan secara otomatis membuat direktori berdasarkan nama file aslinya.

tar zxvf filename.tgz --one-top-level

Selain itu jika Anda mau, Anda dapat menentukan sendiri dan tar akan membuatnya secara otomatis.

tar zxvf filename.tgz --one-top-level=new_directory

Apa yang saya temukan menarik dalam kaitannya dengan ekstraksi adalah, Itu tergantung bagaimana Anda membuat arsip, lihat contoh ini

cd /tmpmkdir foldertouch folder/file.txt

ketika anda melakukan tar -zcvf folder.tar.gz folder semuanya seperti yang diharapkan = ketika Anda untar sekarang akan untarred (folder akan membuat, jika Anda menghapusnya) sebagai /tmp/folder/.

Tapi, ketika Anda akan membuat tar sebagai tar -zcvf tmp-folder.tar.gz /tmp/folder dan Anda untar dalam folder / tmp, hasilnya akan /tmp/tmp/folder direktori ! Dalam kasus seperti itu Anda harus untar untuk / - tar -xf tmp-folder.tar.gz -C /

@ Ujjwal Sing: memang, halaman manual tar tidak begitu membantu. Ini menggambarkan “- C DIR “sebagai” ubah ke direktori DIR”. Lebih buruk lagi: "tar-C mydir XF arsip.tar “tidak bekerja, sementara” tar XF arsip.tar-C mydir " tidak.

Juga '- C, --direktori DIR\n ubah ke direktori DIR ' sebaiknya digambarkan sebagaiubah direktori keluaran ke DIR (akan gagal jika DIR tidak ada)’. Terima Kasih @ Mich. Lihat juga jawaban @ Bryan_Larsen.

@ PatMorin agar adil, setelah Anda memahami argumen yang memanggil konvensi yang Anda gunakan, itu masuk akal. Anda juga dapat melakukan tar XFC arsip.tar mydir 'atau' tar-C mydir-XF arsip.tar. Ini hanya mencampur bendera gaya tradisional dan gaya GNU yang merusak banyak hal, seperti… jujur jenis yang diharapkan. Bendera tradisional dilewatkan semua sebagai satu gumpalan sebagai argumen pertama. Anda tidak dapat mengharapkan mereka untuk bekerja jika mereka bukan yang pertama. (Maksud saya, ya, itu mungkin untuk menafsirkannya-maksud saya adalah itu akan berada di atas dan di luar, bukan standar)