Saya mengalami masalah yang agak aneh, dan saya tidak tahu apa yang terjadi. Saya memiliki file tgz, scip-3.2.0.tgz , yang melempar kesalahan ketika saya mencoba membongkar itu. Kesalahan hanya terjadi pada OS X (Saya di 10.10.4). Saya dapat mengekstrak file tanpa kesalahan pada kotak Linux yang menjalankan CentOS 6.6. Kesalahan terjadi ketika keduanya menggunakan perintah baris tar
perintah dan saat menggunakan utilitas arsip. Saya mengirim email ke milis SCIP, dan saya memiliki hash SHA-1 yang sama dengan pengguna lain ( e085a4a3591eddf945dcb365d97d2512c267e374
), jadi tidak ada kesalahan unduhan. Mereka tidak yakin apa yang sedang terjadi.
Inilah kesalahan yang saya dapatkan ketika saya mencoba membongkar menggunakan utilitas arsip:
Jika gambar pernah rusak, teks dalam gambar mengatakan ini:
Tidak dapat memperluas "scip-3.2.0.tgz" ke "Desktop".
(Kesalahan 1 - Operasi tidak diizinkan.)
Dan ketika saya mencoba membongkar melalui baris perintah, ini adalah output yang saya dapatkan . Ini baris terakhir ( tar: Error exit delayed from previous errors.
) yang menjadi perhatian saya. Saya tidak melihat apa yang menyebabkannya. Arsip tampaknya mengekstraksi tanpa masalah, tapi saya tidak percaya dengan kesalahan yang dilemparkan.
Adakah yang tahu apa yang menyebabkan ini?
[sunting]
Melihat sedikit lebih dekat pada output, baris 1108 berisi kesalahan:
x scip-3.2.0/applications/Coloring/Makefile: Can't create 'scip-3.2.0/applications/Coloring/Makefile'
tar
perintah yang datang dengan OS X.gunzip -c scip-3.2.0.tgz | tar xopf -
dari baris perintah, karena Anda akan menggunakannya untuk skrip Anda?gunzip
berfungsi dengan baik, tetapi ketika saya mencoba untuk mengekstrak tarball terkompresi, saat itulah kesalahan terlempar.Jawaban:
Ini akan membantu mengidentifikasi apa yang terjadi dalam jawaban Johnny , serta menjawab pertanyaan mengapa ini bekerja di Linux tetapi tidak untuk Mac.
Masalahnya terletak pada kenyataan bahwa Mac OS X menggunakan
bsdtar
, sedangkan sebagian besar sistem Linux menggunakangnutar
.Anda dapat menginstal
gnutar
pada Mac dengan Homebrew, menggunakanbrew install gnu-tar
, yang akan symlinkgnutar
ke/usr/local/bin
sebagaigtar
.Jika Anda menginstal
gnutar
, maka Anda dapat mereproduksi masalah menggunakan langkah-langkah dalam jawaban Johnny .Jadi jelas
gnutar
mengarsipkan berbagai hal dengan cara yang menyebabkanbsdtar
tersedak duplikat. Fakta yanggtar -ztvf test.tar.gz
menunjukkan bahwa instance keduatest/a
diarsipkan sebagailink to test/a
relevan. Seperti yang ditunjukkan Johnny dalam komentar,gnutar
akan menyimpan duplikat sebagai tautan keras daripada file yang sebenarnya, yang dapat dinonaktifkan--hard-dereference
.Artinya, Anda bisa melakukan hal berikut:
Namun, dalam hal ini, Anda jelas tidak mengontrol pembuatan tarball, jadi
--hard-dereference
bukan pilihan. Untungnya, berdasarkan jawaban OP , tampaknya masalah ini telah diperbaiki oleh hulu.Meskipun demikian, jika ada orang lain yang mengalami masalah ini di masa depan dan membutuhkan perbaikan cepat atau memiliki pengelola hulu yang tidak responsif, ada solusinya.
Setelah Anda mengidentifikasi apa file duplikat itu, Anda dapat menggunakan
--fast-read
opsibsdtar
(perhatikan bahwa opsi ini hanya bagian daribsdtar
, bukangnutar
):Jadi, dalam contoh mainan yang saya buat mengikuti contoh mainan di jawaban Johnny , file duplikatnya
test/a
. Dengan demikian, Anda dapat menghindari masalah ini dengan melakukan hal berikut:Catatan, apalagi, yang
gnutar
sangat senang membongkar arsip dengan duplikat yang dibuat dengan sendirinya, bahkan ketika--hard-dereference
opsi tidak digunakan:Jadi ini menjawab pertanyaan Anda mengapa ada kesalahan pada Mac tetapi tidak pada Linux. (Sebagian besar) distro Linux dikirim bersama
gnutar
, dan karena tarball mungkin dikemas dengangnutar
, tidak akan ada kesalahan saat membongkargnutar
, tetapi akan ada kesalahan saat membongkarbsdtar
.Untuk bacaan dan referensi lebih lanjut, orang mungkin ingin melihat Apa perbedaan antara tar bsdtar dan GNU? di Unix.SE.
sumber
gtar -tcvf
, gnutar cukup "pintar" untuk mengoptimalkan file salinan kedua sebagai tautan alih-alih menggandakannya dalam arsip.--hard-dereference
opsi menonaktifkan perilaku ini.Keberadaan file duplikat dalam arsip tidak boleh membuatnya tidak valid atau tidak dapat diekstraksi di OSX, karena secara default, tar menimpa duplikat.
Jadi, aku sedikit bingung dengan perilaku di Intisari Anda - OSX tar memungkinkan untuk file duplikat dalam arsip (sebuah kemunduran untuk tujuan aslinya sebagai t kera ar lokio utilitas, sehingga memungkinkan file yang akan ditambahkan ke akhir dari arsip kaset, dan ketika arsip dipulihkan, versi terbaru file akan menimpa versi yang lebih lama
Hanya ketika opsi "-k" muncul, tar harus memperingatkan tentang file yang sudah ada sebelumnya.
Di sini saya membuat arsip dengan file duplikat kemudian diekstraksi tanpa masalah. Tidak sampai saya menambahkan opsi -k yang memperingatkan saya tentang file duplikat:
Masalah umask yang sederhana tampaknya juga bukan penyebabnya, saya mencoba mengubah umask saya menjadi 0777 dan saya masih dapat mengekstrak arsip:
Saya pikir saya bisa menduplikasi masalah dengan sengaja menambahkan direktori yang tidak dapat ditulis ke arsip, tetapi itu tidak berhasil, tar tidak memperbarui izin pada direktori ketika mengekstrak arsip:
Saya juga mencoba mengubah izin pada tes / a ke 000, menambahkannya ke arsip, lalu menambahkan tes lain / a, tetapi yang bekerja dengan baik juga:
Jadi saya benar-benar ingin melihat arsip asli yang menyebabkan masalah dan melihat apa yang ada di arsip itu yang menyebabkan masalah ini.
Jika nama file dan direktori berbagi nama yang sama, tar memang memiliki masalah penggalian, tetapi memiliki pesan kesalahan yang cukup jelas:
(jika konflik terjadi sebaliknya, yaitu file datang pertama, maka direktori dengan nama yang sama datang kemudian, tar hanya menghapusnya dan membuat direktori:
sumber
Ternyata utilitas tar OS X adalah yang benar! Memang ada kesalahan dalam arsip. Utas email ini membahasnya lebih detail, tetapi masalahnya adalah ada file duplikat di arsip . Orang-orang SCIP sedang memperbaiki arsip saat saya mengetik ini.
[sunting]
Scip-3.2.0.tgz yang baru diperbarui sekarang mengekstraksi dengan baik! Hash SHA-1 dari tgz baru adalah
5b4e8283f4a5bf9e50f9a62d4320d6f5f50c8476
.[sunting 2]
Bukannya ada kesalahan dalam arsip. Hanya itu
bsdtar
, yang dikirimkan dengan OS X, menangani file duplikat berbeda darignutar
, yang dikirimkan dengan Linux. @Adam Liter jawaban di sini memberikan penjelasan menyeluruh tentang apa yang terjadi.sumber
-k
opsi, yang akan membuatnya memperingatkan tentang file yang sudah ada sebelumnya. Sayangnya, mereka telah memperbaruiscip-3.2.0.tgz
file untuk menghapus dupe, jadi saya tidak dapat menguji arsip itu.tar
ekstrak bereaksi secara berbeda setelah mencoba untuk mengekstrakscip-3.2.0/applications/Coloring/Makefile
dua kali tergantung pada Andaumask
. Jika yang pertama dibuat tidak memberikan Anda akses tulis, upaya ke-2 gagal.Ada perangkat lunak arsip alternatif, gratis, ringan yang saya gunakan untuk Mac OSX. Ini disebut Keka dan saya menggunakannya untuk membongkar 7zip paling khusus. Selain itu, ia dapat membongkar jenis lain seperti .rar, .tar, .gz dll. Ini juga berfungsi untuk file tar khusus OP, tetapi saya mencobanya setelah @Geoff menyebutkan bahwa tim sedang memperbaiki file tersebut.
sumber