मैक ज़िप __MACOSX फ़ोल्डर के बिना सेक?


158

जब मैं मैक ओएसएक्स में निर्मित ज़िप कंप्रेसर के साथ फ़ाइलों को संपीड़ित करता हूं, तो यह निकाले गए ज़िप में निर्मित "__MACOSX" नामक एक अतिरिक्त फ़ोल्डर में होता है।

क्या मैं इस फ़ोल्डर को बनाए रखने के लिए अपनी सेटिंग्स समायोजित कर सकता हूं या क्या मुझे किसी तीसरे पक्ष के संपीड़न उपकरण को खरीदने की आवश्यकता है?

अद्यतन : मुझे बस OSX के लिए एक फ्रीवेयर ऐप मिला है जो मेरी समस्या को हल करता है: " YemuZip "

अद्यतन 2 : YemuZip अब फ्रीवेयर नहीं है


_MACOSX फ़ोल्डर का अस्तित्व कोई समस्या पैदा नहीं करता है। बस इसे हटा दें।
जयप्रकाश दुबे

1
इस प्रश्न का विषय बंद हो सकता है क्योंकि यह AskDifferent में होना चाहिए प्रकट होता है
Nakilon

11
यह picky वेब सेवाओं के साथ एक समस्या पैदा करता है जिसके लिए एक प्राचीन ज़िप संग्रह की आवश्यकता होती है, इसलिए मैं स्पष्टीकरण के लिए आभारी हूं
mccc

21
Incredibily परेशान @JayprakashDubey यह है, और एक linux उपयोगकर्ता के लिए जो कचरा नहीं छोड़ हर जगह मुझे जाना पसंद करती है के रूप में, मैं बर्दाश्त नहीं कर सकता __MACOSX, .DS_Store, ._fileName, और अन्य सभी मिश्रित turds मैक ओएस इसका संग्रह में चला जाता है। OSX का `टार 'ऐसा ही करता है - कम से कम विस्मय के सिद्धांत के लिए कठोर अवहेलना में ।
व्याट8740

जवाबों:


80

जब मुझे यह समस्या थी तो मैंने इसे कमांड लाइन से किया है:

zip file.zip uncompressed

EDIT , कई डाउनवोट्स के बाद: मैं कुछ समय पहले इस विकल्प का उपयोग कर रहा था और मुझे नहीं पता कि मैंने इसे कहाँ सीखा है, इसलिए मैं आपको बेहतर स्पष्टीकरण नहीं दे सकता। क्रिस जॉनसन का जवाब सही है, लेकिन मैं मेरा डिलीट नहीं करूंगा। जैसा कि एक टिप्पणी कहती है, यह ओपी से क्या पूछ रहा है, इसके बारे में अधिक सटीक है, क्योंकि यह उन फ़ाइलों के बिना संपीड़ित करता है, बजाय एक संपीड़ित फ़ाइल से हटाने के। मुझे याद रखना भी आसान लगता है।


33
इसमें स्पष्टीकरण का अभाव है।
रैप्टर

2
__MACOSX / उपनिर्देशिका में मैक संसाधन कांटे होते हैं और यह तब बनाया जाता है जब आप ज़िप फ़ाइल बनाने के लिए मैक टूल का उपयोग करते हैं। इसी तरह, मैक उपकरण संसाधन कांटे सेट करने के लिए __MACOSX / उपनिर्देशिका का उपभोग करेंगे, और आप इसे कभी भी नहीं देख पाएंगे। हालाँकि, यदि आप ज़िप फ़ाइल बनाने के लिए मैक टूल्स का उपयोग करते हैं और इसे अनपैक करने के लिए कुछ अन्य टूल हैं, तो आपको __MACOSX / निर्देशिका मिलेगी और संसाधन कांटे नहीं। यदि आप उस फ़ाइल को बनाते हैं zip, जो एक 3-पार्टी ऐप है, तो __MACOSX / निर्देशिका कभी भी पहले स्थान पर नहीं बनती है।
एडवर्ड फाल्कन

ज़िप फ़ाइल बनने के बाद _MACOSX फ़ोल्डर को हटाने का एक आसान तरीका के लिए मेरा उत्तर देखें।
क्रिस जॉनसन

3
__MACOSX और अन्य के बिना किसी निर्देशिका को संक्षिप्त रूप से संपीड़ित करने के लिए:zip -rX file.zip uncompressed_directory
कोंस्टेंटिन सुवोरोव

319

द्वारा तथ्य के बाद तय किया जा सकता है zip -d filename.zip __MACOSX/\*


51
को हटाने के लिए zip -d filename.zip \*/.DS_Store
.DS_Store

5
स्वीकृत उत्तर कहता है कि __MACOSX / निर्देशिका को पहले स्थान पर कैसे प्राप्त करें, लेकिन मौजूदा .zip फ़ाइल के साथ क्या करना है, इसके बारे में कुछ नहीं कहता है। यह उत्तर कहता है कि __MACOSX से छुटकारा कैसे पाएं / यदि आप पहले ही पा चुके हैं। हालांकि, मूल प्रश्न यह था कि इसे पहले स्थान पर कैसे प्राप्त किया जाए, इसलिए स्वीकृत उत्तर सही है।
एडवर्ड फाल्कन

मैं इसे सभी ज़िप फ़ाइलों के लिए पुनरावर्ती कैसे कर सकता हूं?
वाहफुन्हापी

कुछ रूट के तहत सभी ज़िप फ़ाइलों पर लागू करने के लिए find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;:। के लिए अपने शुरुआती बिंदु को प्रतिस्थापित करें ~
क्रिस जॉनसन

सभी जंक फ़ाइलों को हटाने के लिए एक फ़ंक्शन cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }:। उपयोग: cleanzip file.zipया cleanzip file.zip MORE_JUNK_FILES(दूसरा पैरामीटर वैकल्पिक है)
mrdaliri

56

उस फ़ोल्डर के अंदर जिसे आप संपीड़ित करना चाहते हैं, टर्मिनल में:

zip -r -X Archive.zip *

जहाँ -X का अर्थ है: उन अदृश्य मैक रिसोर्स फाइल्स को छोड़ दें जैसे कि "_MACOSX" या "._फिलनेम" और .ds फाइलों को स्टोर करना।

स्रोत

नोट: आप केवल उस फ़ोल्डर और उसके बाद वाले फ़ोल्डर ट्री के लिए काम करेंगे, जिसमें *वाइल्डकार्ड होना चाहिए।


9
यह काम नहीं करता है जैसा कि आप सोचते हैं कि यह करता है: -X.DS_Store फ़ाइलों को बाहर नहीं करता है। आपके एप्लिकेशन के काम करने का कारण यह हो सकता है कि आप केवल ज़िप कर रहे हैं *, जो एक वाइल्डकार्ड मिलान वाली फाइल है जो "" "से शुरू नहीं होती है।" इसे एक निर्देशिका पर आज़माएं जिसमें एक डॉट-फ़ाइल है, और आप देखेंगे कि यह शामिल हो जाता है।
पालक

ज़िप फ़ाइल बनने के बाद _MACOSX फ़ोल्डर को हटाने का एक आसान तरीका के लिए मेरा उत्तर देखें।
क्रिस जॉनसन

1
नहीं। zip -r -X Archive.zip myfolderफोल्डर पर करने पर भी ज़िप फ़ाइल में परिणाम होता है .DS_Store फ़ाइल।
रॉकलाईट

@Rockallite: आप सही हैं कि यह तभी काम करेगा जब आप उस फ़ोल्डर, ट्री या फाइलों को ज़िप करेंगे, जो आप फ़ोल्डर में हैं। इसलिए आप एक फ़ोल्डर को एक तर्क के रूप में पारित नहीं कर सकते हैं या यह अपेक्षित रूप से काम नहीं करेगा, केवल * वाइल्डकार्ड के साथ। यह चलेगा।
पोमपालिनी

यह एक संपूर्ण फ़ोल्डर को ज़िप करने के बजाय निर्देशिका के अंदर फ़ाइलों के लिए काम करता है।
माइकल ट्रू

26

इस कमांड ने मेरे लिए यह किया:

zip -r Target.zip Source -x "*.DS_Store"

Target.zipज़िप फ़ाइल बनाने के लिए है। Sourceज़िप करने के लिए स्रोत फ़ाइल / फ़ोल्डर है। और _xपैरामीटर फ़ाइल / फ़ोल्डर को शामिल नहीं करने के लिए निर्दिष्ट करता है। यदि ऊपर जो भी कारण से काम नहीं करता है, इसके बजाय यह प्रयास करें:

zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"

ओपी ने पूछा कि __MACOSX फ़ोल्डर को कैसे बाहर रखा जाए। आपका पहला कोड स्निपेट स्पष्ट रूप से काम नहीं करता है, क्योंकि यह उस फ़ोल्डर का नाम नहीं है जिसे बाहर करना है।
क्रिस जॉनसन

7
zipकमांड लाइन उपयोगिता एक कभी नहीं बनाता __MACOSXनिर्देशिका, इसलिए पहले टुकड़ा काम करता है, और -x "__MACOSX"भाग की जरूरत नहीं है।
निसातमा

15

मैं इसे ठीक करने के बाद इस Automator Shell Script का उपयोग कर रहा हूं। यह संदर्भ मेनू आइटम के रूप में दिखाई दे रहा है (फाइंडर में दिखाई देने वाली किसी भी फ़ाइल पर राइट क्लिक)।

while read -r p; do
  zip -d "$p" __MACOSX/\* || true
  zip -d "$p" \*/.DS_Store || true
done
  1. ऑटोमेटर के साथ एक नई सेवा बनाएँ
  2. "फाइंडर" में "फ़ाइलें और फ़ोल्डर" चुनें
  3. "शेल स्क्रिप्ट एक्शन" जोड़ें

ऑटोमेटर शेल स्क्रिप्ट

खोजक में प्रासंगिक मेनू आइटम


क्या यह बेहतर नहीं होगा कि आटोमैटर शेल स्क्रिप्ट में जिप का इस्तेमाल कर कम्‍प्‍यूटिंग की बजाय एप्‍पल बिल्ट-इन का उपयोग कर कम्‍प्रेशर किया जाए, फिर अनचाहे फाइलों को?
मैट

@ मैट आप ऑटोमेटर में आर्काइव स्टेप जोड़ सकते हैं या दूसरे शेल कमांड का भी उपयोग कर सकते हैं।
ttimasdf

@Matt भी, जब फ़ाइल मौजूद होती है तो Apple अंतर्निहित स्वचालित फ़ाइल नामकरण और नाम वृद्धि को संभालता है। शेल स्क्रिप्ट के साथ यह हिस्सा बहुत काम आएगा।
ttimasdf

1
यदि संग्रह में .DS_Store फ़ोल्डर मौजूद नहीं है, तो यह एक त्रुटि फेंकता है। मैं `जोड़कर सुधार का सुझाव देता हूँ || सच `प्रत्येक ज़िप आदेश के बाद (जैसे कि zip -d "$p" __MACOSX/\* || trueआपके उत्तर में।
adamsfamily

1
जबकि अन्य उत्तर अच्छे हैं, मुझे यह सबसे अच्छा लगता है क्योंकि इसका उपयोग बहुत ही शानदार तरीके से किया जा सकता है।
not2savvy

10

अवांछित फ़ोल्डरों को निम्न तरीके से हटाया जा सकता है:

zip -d filename.zip "__MACOSX*"

मेरे लिए सबसे अच्छा काम करता है


8
zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX": __MACOSX को अनदेखा करें जैसा कि आप उल्लेख करते हैं।
  • -x "*/\.*": किसी भी छुपी हुई फ़ाइल को अनदेखा करें, जैसे .DS_Store।
  • यदि यह SPACE के साथ नामित है तो फ़ाइल से बचने के लिए चर को कोट करें।

इसके अलावा, आप खोजक में आसानी से उपयोग करने के लिए ऑटोमेटर सेवा का निर्माण कर सकते हैं। यदि आवश्यक हो तो विस्तार से देखने के लिए नीचे दिए गए लिंक की जाँच करें।

Github


हेह, कचरे के समुद्र के बीच एकमात्र सही उत्तर, कम से कम वोटों वाला भी है। / उच्छ्वास
हीथ रेपरेटी

इसने मेरे लिए काम किया लेकिन मुझे डेस्टिनेलेनामे.ज़िप और srcFileName से पहले डॉलर और सिंबल के उद्धरणों को हटाना पड़ा
अलेक्जेंडर

3

zipकमांड लाइन उपयोगिता एक कभी नहीं बनाता __MACOSXनिर्देशिका है, तो आप सिर्फ इस तरह एक आदेश चला सकते हैं:

zip directory.zip -x \*.DS_Store -r directory

नीचे दिए गए आउटपुट में, a.zipजिसे मैंने zipकमांड लाइन उपयोगिता के साथ बनाया था , जिसमें एक __MACOSXनिर्देशिका नहीं है , लेकिन a 2.zipजो मैंने फाइंडर से बनाया है।

$ touch a
$ xattr -w somekey somevalue a
$ zip a.zip a
  adding: a (stored 0%)
$ unzip -l a.zip
Archive:  a.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
 --------                   -------
        0                   1 file
$ unzip -l a\ 2.zip # I created `a 2.zip` from Finder before this
Archive:  a 2.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
        0  01-02-16 20:31   __MACOSX/
      149  01-02-16 20:29   __MACOSX/._a
 --------                   -------
      149                   3 files

-x .DS_Store.DS_Storeनिर्देशिका के अंदर फ़ाइलों को बाहर नहीं करता है, लेकिन -x \*.DS_Storeकरता है।

एकाधिक फ़ाइलों वाली ज़िप संग्रह की शीर्ष स्तर की फ़ाइल आमतौर पर एक एकल निर्देशिका होनी चाहिए, क्योंकि यदि यह नहीं है, तो कुछ अनअर्काइविंग उपयोग (जैसे unzipऔर 7zनहीं, लेकिन आर्काइव उपयोगिता, द अनारकलीवर unar, या dtrx) निर्देशिका के लिए एक युक्त निर्देशिका नहीं बनाते हैं। फ़ाइलें जब संग्रह को निकाला जाता है, जो अक्सर फ़ाइलों को खोजने में मुश्किल बनाता है, और अगर एक ही समय में कई अभिलेखागार निकाले जाते हैं, तो यह बताना मुश्किल हो सकता है कि कौन सी फाइलें किस संग्रह से संबंधित हैं।

पुरालेख उपयोगिता केवल एक __MACOSXनिर्देशिका बनाती है जब आप एक आर्काइव बनाते हैं जहाँ कम से कम एक फ़ाइल में मेटाडेटा जैसे विस्तारित गुण, फ़ाइल फ़्लैग या एक संसाधन टोकन होता है। __MACOSXनिर्देशिका AppleDouble फ़ाइलें जिसका फ़ाइल नाम के साथ शुरू होता है होता है ._कि ओएस एक्स-विशिष्ट मेटाडाटा स्टोर करने के लिए उपयोग किया जाता है। zipकमांड लाइन उपयोगिता छोड देता है मेटाडाटा इस तरह के विस्तारित गुण, फ़ाइल झंडे, और संसाधन कांटे, जो भी मतलब है कि मेटाडाटा जैसे टैग खो दिया है, और कहा कि अन्य नामों काम करना बंद कर, क्योंकि एक उपनाम फ़ाइल में जानकारी एक संसाधन कांटा में संग्रहीत किया जाता है।

आम तौर पर आप बस ओएस एक्स-विशिष्ट मेटाडेटा को छोड़ सकते हैं, लेकिन यह देखने के लिए कि मेटाडेटा फ़ाइलों में क्या है, आप उपयोग कर सकते हैं xattr -lxattrइसमें संसाधन कांटे और फ़ाइल फ़्लैग भी शामिल हैं, क्योंकि भले ही वे वास्तव में विस्तारित विशेषताओं के रूप में संग्रहीत नहीं हैं, फिर भी उन्हें विस्तारित विशेषताओं इंटरफ़ेस के माध्यम से एक्सेस किया जा सकता है। आर्काइव यूटिलिटी और zipकमांड लाइन यूटिलिटी दोनों ACL को छोड़ देते हैं।


यह केवल निर्देशिकाओं के लिए काम करता है, निर्देशिका के अंदर फ़ाइल के एक समूह के लिए नहीं।
माइकल ट्रू

@MichaelTrouw हां, लेकिन आपको आमतौर पर एक संग्रह नहीं बनाना चाहिए जिसमें पहले स्थान पर शीर्ष स्तर पर कई फाइलें हों।
निसेतमा

मैं असहमत हूं क्योंकि ऐसे मामले हैं जहां यह ठीक है। उदाहरण के लिए, एक जिसमें zipfile का अंतिम उपयोगकर्ता कभी भी उपयोगकर्ता नहीं होगा। लेकिन एक सर्वर।
माइकल ट्रू

3

आप नहीं कर सकते।

लेकिन आप जो भी कर सकते हैं, ज़िप करने के बाद उन अवांछित फ़ोल्डरों को हटा दें। कमांड लाइन zipअलग-अलग तर्क लेती है, जहां एक, -dएक रेगेक्स के आधार पर सामग्री को हटाने के लिए है। तो आप इसे इस तरह से उपयोग कर सकते हैं:

zip -d filename.zip __MACOSX/\*

2

किसी छिपी हुई फ़ाइल को ज़िप न करें:

zip newzipname filename.any  -x "\.*"

इस सवाल के साथ, यह इस तरह होना चाहिए:

zip newzipname filename.any  -x "\__MACOSX"

यह कहा जाना चाहिए, हालांकि, टर्मिनल में जिप कमांड सिर्फ फ़ाइल को संपीड़ित करने में चलता है, यह किसी अन्य को संपीड़ित नहीं करता है। तो यह परिणाम एक ही है:

zip newzipname filename.any

__MACOSXके साथ शुरू नहीं होता है.
PJMeisch

हाँ, मैंने एक गलती की। इसे संशोधित किया गया है। मुझे याद दिलाने के लिए धन्यवाद
जियान शू

1

क्या आपका मतलब है? zip कमांड-लाइन टूल या फाइंडर कंप्रेस कमांड है?

के लिए zip, आप --data-forkविकल्प का प्रयास कर सकते हैं । यदि वह ऐसा नहीं करता है, तो आप कोशिश कर सकते हैं--no-extra , हालांकि यह लगता है कि अन्य फ़ाइल मेटाडेटा को अनदेखा करता है, जो कि मूल्यवान हो सकता है, जैसे कि uid / gid और फ़ाइल समय।

फ़ाइंडर कंप्रेस कमांड के लिए, मुझे नहीं लगता कि इसके व्यवहार को नियंत्रित करने के लिए कोई विकल्प हैं। यह साधारण मामले के लिए है।

अन्य उपकरण, और शायद वह है जिसे खोजक वास्तव में हुड के तहत उपयोग करता है ditto-c -kविकल्पों के साथ , यह ज़िप अभिलेखागार बनाता है। इस उपकरण के साथ, आप के साथ प्रयोग कर सकते हैं --norsrc, --noextattr, --noqtn, --noaclऔर / या बस को बंद रखना होगा --sequesterRsrcविकल्प (जो, आदमी पृष्ठ के अनुसार, के लिए जिम्मेदार हो सकता है __MACOSXउपनिर्देशिका)। हालाँकि, शायद अनुपस्थिति का --sequesterRsrcमतलब AppleDouble प्रारूप का उपयोग करना है, जो एक __MACOSXनिर्देशिका के बजाय सभी जगह पर ._ फाइलें बनाएगा ।


1
हां, मैं खोजकर्ता की "कंप्रेस" उपयोगिता की बात कर रहा हूं। जैसा कि है, मुझे एक फ़ोल्डर मिल रहा है ._ फाइलें जो वर्डप्रेस की उपस्थिति / संपादक
स्कॉट बी

1

मेरे पास मौजूद सभी उत्तरों को पढ़ने के बाद मेरे पास एक बेहतर समाधान है। सब कुछ एक सही क्लिक में एक वर्कफ़्लो द्वारा किया जा सकता है। कोई अतिरिक्त सॉफ्टवेयर, कोई जटिल कमांड लाइन सामान और कोई शेल चाल नहीं।

ऑटोमेकर वर्कफ़्लो:

  • इनपुट: किसी भी एप्लिकेशन से फाइल या फोल्डर।
  • चरण 1: पुरालेख बनाएँ, डिफ़ॉल्ट मापदंडों के साथ सिस्टम बिल्ट।
  • चरण 2: पैरामीटर के रूप में इनपुट के साथ शेल कमांड चलाएं। नीचे कमांड को कॉपी करें।

    zip -d "$@" "__MACOSX/*" || true

    zip -d "$@" "*/.DS_Store" || true

इसे बचाओ और हम कर रहे हैं! बस फ़ोल्डर या फ़ाइलों के थोक पर राइट क्लिक करें और सेवा मेनू से वर्कफ़्लो चुनें। बिना मेटाडेटा वाले पुरालेख को साथ बनाया जाएगा।

नमूना


0

__MACOSXजब मैं फ़ाइलों को tarकमांड के साथ संपीड़ित करता हूं, तो इस तरह से बचा जाता हूं :

$ 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

पहले विशेषता हटाएँ:

find . | xargs xattr -d com.apple.quarantine

find . | xargs xattr -lफिर से चलाएँ , सुनिश्चित करें कि किसी भी फ़ाइल में xattr विशेषता नहीं है। तब आप जाने के लिए अच्छे हैं:

tar cjvf file.tar.bz2 dir

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.