Ketika saya mengompres file dengan kompresor zip bawaan di Mac OSX, itu menghasilkan folder tambahan berjudul "__MACOSX" yang dibuat di zip yang diekstraksi.
Dapatkah saya menyesuaikan pengaturan saya agar folder ini tidak dibuat atau apakah saya perlu membeli alat kompresi pihak ketiga?
PEMBARUAN : Saya baru saja menemukan aplikasi freeware untuk OSX yang memecahkan masalah saya: " YemuZip "
UPDATE 2 : YemuZip tidak lagi freeware
__MACOSX
,.DS_Store
,._fileName
, dan semua macam turds lainnya Mac OS tetes dalam arsipnya. `Tar 'OSX juga melakukan ini - dengan mengabaikan prinsip paling tidak mengejutkan .Jawaban:
Ketika saya memiliki masalah ini, saya sudah melakukannya dari baris perintah:
zip file.zip uncompressed
EDIT , setelah banyak downvotes: Saya menggunakan opsi ini untuk beberapa waktu yang lalu dan saya tidak tahu di mana saya mempelajarinya, jadi saya tidak bisa memberi Anda penjelasan yang lebih baik. Jawaban Chris Johnson benar, tetapi saya tidak akan menghapus jawaban saya. Seperti satu komentar katakan, itu lebih akurat untuk apa yang diminta OP, karena kompres tanpa file-file itu, daripada menghapusnya dari file terkompresi. Saya juga merasa lebih mudah diingat.
sumber
zip
, yang merupakan aplikasi pihak ke-3, maka direktori __MACOSX / tidak pernah dibuat di tempat pertama.zip -rX file.zip uncompressed_directory
Dapat diperbaiki setelah fakta oleh
zip -d filename.zip __MACOSX/\*
sumber
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Gantikan titik awal Anda untuk~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Penggunaan:cleanzip file.zip
ataucleanzip file.zip MORE_JUNK_FILES
(parameter kedua adalah opsional)Di dalam folder yang ingin dikompres, di terminal:
Di mana -X berarti: Kecualikan file sumber daya Mac yang tidak terlihat seperti "_MACOSX" atau "._Filename" dan .ds menyimpan file
sumber
Catatan: Hanya akan berfungsi untuk folder dan struktur folder berikutnya tempat Anda berada dan harus memiliki
*
wildcard.sumber
-X
tidak mengecualikan file .DS_Store. Alasannya mungkin untuk aplikasi Anda adalah bahwa Anda hanya zip*
, yang merupakan file pencocokan wildcard yang tidak dimulai dengan ".". Cobalah di direktori yang berisi file dot, dan Anda akan melihatnya disertakan.zip -r -X Archive.zip myfolder
pada folder masih menghasilkan file zip yang berisi file .DS_Store.Perintah ini melakukannya untuk saya:
Target.zip
adalah file zip untuk dibuat.Source
adalah file sumber / folder untuk di-zip up. Dan_x
parameter menentukan file / folder yang tidak termasuk. Jika hal di atas tidak berhasil karena alasan apa pun, coba ini sebagai gantinya:sumber
zip
utilitas baris perintah tidak pernah menciptakan__MACOSX
direktori, sehingga potongan pertama tidak bekerja, dan-x "__MACOSX"
bagian tidak diperlukan.Saya menggunakan Script Shell Automator ini untuk memperbaikinya setelah. Itu muncul sebagai item menu kontekstual (mengklik kanan pada file yang muncul di Finder).
sumber
zip -d "$p" __MACOSX/\* || true
dalam jawaban Anda.Folder yang tidak diinginkan juga dapat dihapus dengan cara berikut:
Berfungsi terbaik untuk saya
sumber
-x "*/\__MACOSX"
: abaikan __MACOSX seperti yang Anda sebutkan.-x "*/\.*"
: abaikan file tersembunyi, seperti .DS_Store.Selain itu, Anda dapat membuat Layanan Automator agar mudah digunakan di Finder. Periksa tautan di bawah untuk melihat detail jika Anda perlu.
Github
sumber
The
zip
utilitas baris perintah tidak pernah menciptakan__MACOSX
direktori, sehingga Anda hanya dapat menjalankan perintah seperti ini:Dalam output di bawah ini,
a.zip
yang saya buat denganzip
utilitas baris perintah tidak mengandung__MACOSX
direktori, tetapia 2.zip
yang saya buat dari Finder tidak.-x .DS_Store
tidak mengecualikan.DS_Store
file di dalam direktori tetapi-x \*.DS_Store
tidak.File tingkat atas dari arsip zip dengan banyak file biasanya harus berupa direktori tunggal, karena jika tidak, beberapa utiliti yang tidak diarsipkan (seperti
unzip
dan7z
, tetapi bukan Archive Utility, The Unarchiverunar
,, ataudtrx
) tidak membuat direktori yang berisi untuk file ketika arsip diekstraksi, yang sering membuat file sulit ditemukan, dan jika banyak arsip seperti itu diekstraksi pada saat yang sama, mungkin sulit untuk mengetahui file mana yang termasuk dalam arsip mana.Utilitas Arsip hanya menciptakan a
__MACOSX
direktori ketika Anda membuat arsip di mana setidaknya satu file berisi metadata seperti atribut yang diperluas, flag file, atau garpu sumber daya. The__MACOSX
direktori berisi file AppleDouble yang nama file dimulai dengan._
yang digunakan untuk menyimpan metadata OS X spesifik. Thezip
utilitas membuang baris perintah metadata seperti atribut diperpanjang, bendera file, dan sumber daya garpu, yang juga berarti bahwa metadata seperti tag hilang, dan bahwa alias berhenti bekerja, karena informasi dalam file alias disimpan dalam sumber daya garpu.Biasanya Anda hanya bisa membuang metadata spesifik OS X, tetapi untuk melihat apa yang terkandung dalam file metadata, Anda dapat menggunakannya
xattr -l
.xattr
juga termasuk garpu sumber daya dan bendera file, karena meskipun sebenarnya tidak disimpan sebagai atribut diperluas, mereka dapat diakses melalui antarmuka atribut diperluas. Utilitas Arsip danzip
utilitas baris perintah membuang ACL.sumber
Kamu tidak bisa
Tetapi yang dapat Anda lakukan adalah menghapus folder-folder yang tidak diinginkan setelah zip. Baris perintah
zip
mengambil argumen yang berbeda di mana satu, yaitu-d
, untuk menghapus konten berdasarkan regex. Jadi Anda bisa menggunakannya seperti ini:sumber
jangan zip file tersembunyi apa pun:
dengan pertanyaan ini, seharusnya seperti:
Harus dikatakan, meskipun, perintah zip berjalan di terminal hanya mengompresi file, itu tidak memampatkan yang lain. Jadi lakukan ini hasilnya sama:
sumber
__MACOSX
tidak memulai dengan.
Apakah maksud Anda
zip
alat baris perintah atau perintah Kompres Pencari?Sebab
zip
, Anda bisa mencoba--data-fork
opsi. Jika itu tidak berhasil, Anda dapat mencoba--no-extra
, meskipun itu tampaknya mengabaikan metadata file lain yang mungkin berharga, seperti waktu uid / gid dan file.Untuk perintah Compress Finder's, saya tidak percaya ada opsi untuk mengontrol perilakunya. Ini untuk kasus sederhana.
Alat lainnya, dan mungkin yang digunakan Finder sebenarnya di bawah tenda, adalah
ditto
. Dengan-c -k
opsi - opsi itu, ia menciptakan arsip zip. Dengan alat ini, Anda dapat melakukan percobaan dengan--norsrc
,--noextattr
,--noqtn
,--noacl
dan / atau hanya meninggalkan dari--sequesterRsrc
pilihan (yang menurut halaman manual, mungkin bertanggung jawab untuk__MACOSX
subdirektori). Meskipun, mungkin tidak adanya--sequesterRsrc
sarana untuk menggunakan format AppleDouble, yang akan membuat file ._ di semua tempat alih-alih satu__MACOSX
direktori.sumber
Saya punya solusi yang lebih baik setelah membaca semua jawaban yang ada. Semuanya bisa dilakukan dengan alur kerja dalam satu klik kanan. TIDAK ada perangkat lunak tambahan, TIDAK ada baris perintah yang rumit, dan tidak ada trik shell.
Alur kerja automator:
Langkah 2: Jalankan perintah Shell, dengan input sebagai parameter. Salin perintah di bawah ini.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Simpan itu dan kita selesai! Cukup klik kanan folder atau sebagian besar file dan pilih workflow dari menu layanan. Arsip tanpa metadata akan dibuat di samping.
sumber
Ini adalah cara saya menghindari
__MACOSX
direktori ketika kompres file dengantar
perintah:$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
Hapus dulu atributnya:
find . | xargs xattr -d com.apple.quarantine
Jalankan
find . | xargs xattr -l
lagi, pastikan tidak ada file yang memiliki atribut xattr. maka Anda baik untuk pergi:tar cjvf file.tar.bz2 dir
sumber