Juga, -C, --directory DIR\n change to directory DIRlebih baik digambarkan sebagai change output directory to DIR (will fail if DIR doesn't exist). Terima kasih @Mich. Lihat juga jawaban @ Bryan_Larsen.
berlaku
1
@Ujjwal Sing: Memang, halaman tar tar tidak begitu membantu. Ini menggambarkan "-C DIR" sebagai "ubah ke direktori DIR". Lebih buruk lagi: "tar -C mydir xf archive.tar" tidak berfungsi, sementara "tar xf archive.tar -C mydir" tidak berfungsi.
Pat Morin
@PatMorin Agar adil, setelah Anda memahami konvensi pemanggilan argumen yang Anda gunakan masuk akal. Anda juga dapat melakukan tar xfC archive.tar mydiratau tar -C mydir -xf archive.tar. Itu hanya mencampur bendera gaya tradisional dan gaya GNU yang merusak segalanya, seperti ... yang diharapkan secara jujur. Bendera tradisional dilewatkan semua sebagai satu gumpalan sebagai argumen pertama. Anda tidak dapat mengharapkan mereka bekerja jika mereka bukan yang pertama. (Maksudku, ya, toh itu mungkin untuk menafsirkannya - maksud saya adalah bahwa itu akan di atas dan di luar, bukan standar)
Nic Hartley
Jawaban:
958
Untuk mengekstrak arsip ke direktori yang berbeda dari yang sekarang, gunakan opsi -C, atau --directory, 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).
Dapatkah jalan dilucuti: yaitu hanya mengambil file
zzapper
3
Jika ini file yang lebih besar, ketika Anda menjalankan perintah, yang Anda dapatkan adalah tidak ada output selama beberapa detik atau bahkan menit saat sedang bekerja. Anda dapat memperbaikinya dengan menambahkan -vflag ( mode verbose ) yang mencantumkan nama setiap file saat diekstrak.
IQAndreas
Jika Anda mengalami masalah dengan ini, perhatikan --strip-components=1saran dari jawaban lain juga.
Bukankah menakjubkan bahwa, setelah bertahun-tahun ini, dengan semua opsi tartelah terakumulasi, masih belum ada opsi untuk membuat direktori output jika tidak ada ?
EM0
261
Perhatikan bahwa jika tarball Anda sudah berisi nama direktori yang ingin Anda ubah, tambahkan --strip-components=1opsi:
tar xf archive.tar -C /target/directory --strip-components=1
Terima kasih. Unduhan melalui wget / etc selalu memiliki direktori 'parent'. Ini adalah jawaban lengkap imo - atau harus dicatat dalam jawaban di atas.
bshea
Apa yang saya cari. --strip-componentssangat berguna saat menjalankan penyedia yang mungkin menggunakan versi yang berbeda. Cara ini /target/directorybisa berupa nama umum, tanpa harus khawatir tentang bagaimana penyedia memilih untuk memberi nama folder arsip mereka.
Jack_Hu
30
Menggabungkan jawaban dan komentar sebelumnya:
Untuk hanya mengekstrak konten dan membuat direktori target jika tidak ada:
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
Saya menggunakan GNU tar 1.26 dan saya mendapatkan opsi error yang tidak dikenal untuk--one-top-level
Emma Strubell
Ini jawaban yang saya butuhkan. Sangat berguna "tidak" harus menentukan nama direktori, atau ingat kode khusus yang akan merujuk kembali ke file untuk nama tersebut. Terima kasih.
Hypocritus
2
Apa yang saya temukan menarik dalam kaitannya dengan ekstraksi adalah, itu tergantung bagaimana Anda membuat arsip, lihat contoh ini
cd /tmp
mkdir folder
touch folder/file.txt
ketika Anda melakukan tar -zcvf folder.tar.gz foldersemuanya seperti yang diharapkan = ketika Anda membuka untar sekarang akan dibatalkan (folder akan dibuat, jika Anda menghapusnya) sebagai /tmp/folder/.
Tapi, ketika Anda akan membuat tar sebagai tar -zcvf tmp-folder.tar.gz /tmp/folderdan Anda untar di folder / tmp, hasilnya adalah /tmp/tmp/folderdirektori! Jika demikian, Anda harus melepaskannya ke / -tar -xf tmp-folder.tar.gz -C /
-C, --directory DIR\n change to directory DIR
lebih baik digambarkan sebagaichange output directory to DIR (will fail if DIR doesn't exist)
. Terima kasih @Mich. Lihat juga jawaban @ Bryan_Larsen.tar xfC archive.tar mydir
atautar -C mydir -xf archive.tar
. Itu hanya mencampur bendera gaya tradisional dan gaya GNU yang merusak segalanya, seperti ... yang diharapkan secara jujur. Bendera tradisional dilewatkan semua sebagai satu gumpalan sebagai argumen pertama. Anda tidak dapat mengharapkan mereka bekerja jika mereka bukan yang pertama. (Maksudku, ya, toh itu mungkin untuk menafsirkannya - maksud saya adalah bahwa itu akan di atas dan di luar, bukan standar)Jawaban:
Untuk mengekstrak arsip ke direktori yang berbeda dari yang sekarang, gunakan opsi
-C
, atau--directory
, tar, seperti padaPerhatikan bahwa direktori target harus ada sebelum menjalankan perintah itu (dapat dibuat oleh
mkdir /target/directory
).Baca halaman manual (perintah:)
man tar
untuk opsi lain.sumber
-v
flag ( mode verbose ) yang mencantumkan nama setiap file saat diekstrak.--strip-components=1
saran dari jawaban lain juga.tar
telah terakumulasi, masih belum ada opsi untuk membuat direktori output jika tidak ada ?Perhatikan bahwa jika tarball Anda sudah berisi nama direktori yang ingin Anda ubah, tambahkan
--strip-components=1
opsi:sumber
--strip-components
sangat berguna saat menjalankan penyedia yang mungkin menggunakan versi yang berbeda. Cara ini/target/directory
bisa berupa nama umum, tanpa harus khawatir tentang bagaimana penyedia memilih untuk memberi nama folder arsip mereka.Menggabungkan jawaban dan komentar sebelumnya:
Untuk hanya mengekstrak konten dan membuat direktori target jika tidak ada:
Untuk mengekstrak dan juga menghapus direktori root (tingkat pertama) di zip
sumber
Pilihan lain adalah menggunakan --one-top-level. Ini secara otomatis akan membuat direktori berdasarkan nama file aslinya.
Selain itu jika Anda mau, Anda bisa menentukan sendiri dan tar akan membuatnya secara otomatis.
sumber
--one-top-level
Apa yang saya temukan menarik dalam kaitannya dengan ekstraksi adalah, itu tergantung bagaimana Anda membuat arsip, lihat contoh ini
ketika Anda melakukan
tar -zcvf folder.tar.gz folder
semuanya seperti yang diharapkan = ketika Anda membuka untar sekarang akan dibatalkan (folder akan dibuat, jika Anda menghapusnya) sebagai/tmp/folder/
.Tapi, ketika Anda akan membuat tar sebagai
tar -zcvf tmp-folder.tar.gz /tmp/folder
dan Anda untar di folder / tmp, hasilnya adalah/tmp/tmp/folder
direktori! Jika demikian, Anda harus melepaskannya ke / -tar -xf tmp-folder.tar.gz -C /
sumber
Dengan tar 1.29, kita bisa menambahkan nama direktori setelah nama file tar. Misalnya,
sumber