मुझे OS X पर मेरे टारबॉल में ._foo जैसी फाइलें क्यों मिलती हैं?


70

जब मैं ओएस एक्स में कुछ फ़ाइलों को टारगेट करता हूं:

tar cvf foo.tar foo

यह ._fooटैरबॉल में एक अतिरिक्त फ़ाइल का उत्पादन करता है :

./._foo
foo

जो केवल दिखाता है अगर मैं इसे गैर-मैक ऑपरेटिंग सिस्टम पर निकालता हूं। लेकिन ._fooमेरी फाइल सिस्टम पर मौजूद नहीं है! क्या चल रहा है? मुझे इससे कैसे छुटकारा मिल सकता है?


नफरत है कि। जब मैं 7-जिप के साथ अभिलेखागार के अंदर ब्राउज़ कर रहा हूं तो यह बदसूरत लगता है।
नथानिएल

जवाबों:


79

OS X का तार विस्तारित विशेषताओं और ACL को संग्रहीत करने के लिए AppleDouble प्रारूप का उपयोग करता है।

$ touch file1 file2 file3
$ xattr -w key value file1
$ chmod +a 'admin allow delete' file2
$ ls -le@ *
-rw-r--r--@ 1 lauri  staff  0 May 25 07:09 file1
    key 5
-rw-r--r--+ 1 lauri  staff  0 May 25 07:09 file2
 0: group:admin allow delete
-rw-r--r--  1 lauri  staff  0 May 25 07:09 file3
$ tar -cf 1.tar *
$ tar -tf 1.tar
./._file1
file1
./._file2
file2
file3

OS X का टार यह भी जानता है कि ._ सदस्यों को मूल प्रारूपों में कैसे बदला जाए, लेकिन ._ फाइलें आमतौर पर तब रखी जाती हैं जब अभिलेखागार को अन्य प्लेटफार्मों पर निकाला जाता है। आप COPYFILE_DISABLE को कुछ मान सेट करके मेटाडेटा को शामिल नहीं करने के लिए टार बता सकते हैं:

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*    
$ tar -tf 2.tar
file1
file2
file3
  • Copyfile फ़ंक्शन में वर्णित हैं man copyfile
  • ls -l@विस्तारित विशेषताओं की कुंजी और आकार दिखाता है, ls -leACL प्रिंट करता है
  • xattr -l विस्तारित विशेषताओं की कुंजियों और मूल्यों को सूचीबद्ध करता है
  • xattr -c सभी विस्तारित विशेषताओं को साफ़ करता है (-d अकेले उपयोग नहीं किया जा सकता है)
  • chmod -N ACL को हटाता है
  • ओएस एक्स पर बनाई गई ज़िप फाइलें समान मेटाडेटा को स्टोर करने के लिए एक __MACOSX फ़ोल्डर का उपयोग करती हैं

विस्तारित विशेषताओं के रूप में संग्रहीत जानकारी:

  • संसाधन कांटे (संसाधन कांटे 10.4 के बाद से विस्तारित विशेषता हैं)
    • कस्टम आइकन खोजक और Icon \ r फ़ाइलों की छवियों में सेट
    • PSD फ़ाइलों में मेटाडेटा
    • स्कैप्ट फ़ाइलों में संग्रहीत वस्तुएं, AppleScript संपादक विंडो स्थिति, स्क्रिप्ट का वर्णन
  • एलियास के बारे में जानकारी (एलियास काम करना बंद कर देता है यदि विस्तारित विशेषताएँ हटा दी जाती हैं)
  • इंटरनेट से डाउनलोड की गई फ़ाइलों की संगरोध स्थिति या स्रोत URL
  • स्पॉटलाइट टिप्पणियाँ
  • TextEdit के साथ सहेजी गई फ़ाइलों का एन्कोडिंग
  • TextMate के साथ खोली गई फ़ाइलों की कैरेट स्थिति
  • स्किम नोट्स

मैकओएस एक्स 10.5.8 (तेंदुआ) पर डिफ़ॉल्ट रूप से मेरे पास जीएनयू टार 1.15.1 है। GNU का नवीनतम संस्करण 1.22 (मार्च 2009) है। डाउनलोड और निर्मित: यह MacOS X पर निर्मित होने पर '--no-xattrs' के लिए प्रकट नहीं होता है।
जोनाथन

1
इस चर को पूरे सिस्टम में निर्यात करने के बजाय आप इसका उपयोग भी कर सकते हैं env COPYFILE_DISABLE tar -cf archive.tar my_folder/
जॉर्ज शॉली

1
@ कवास, समस्या यह थी कि वे टारबॉल में दिखाई दिए, जिसे मैं तब क्रॉस-प्लेटफॉर्म वितरित कर रहा था, और गैर-एप्पल ऑपरेटिंग सिस्टम पर उनका कोई मतलब नहीं है।
जेसी बेडर

1
यह सच है जेसी, वे वास्तव में अन्य OS'es / filesystems के लिए कोई मतलब नहीं है । लेकिन जानकारी नहीं है और हम कर सकते हैं catया typeक्या, अंदर कम से कम देखने के लिए। और यह आमतौर पर कुछ सरल पाठ है जो मैन्युअल रूप से वहां इनपुट था। मैं इसे दूर करने के लिए नहीं फेंकूंगा, लेकिन अगर आप कुछ क्रॉस-प्लेटफॉर्म वितरित करना चाहते हैं तो यह कचरा हो सकता है और विशेष रूप से अगर यह गलती से हो तो। केवल उन्हें छोड़ने का विकल्प कहना बहुत मान्य है।
cregox

1
FYI करें, तेंदुए के लिए निर्यात लाइन भी शेर के लिए काम करती है।
jeateaton

12

के रूप में bsdtar 3.0.3 - libarchive 3.0.3(और शायद पहले) फ़ाइलों के निर्माण को दबाने के लिए bsdtarकहा --disable-copyfileजाने वाला कमांड का एक नया विकल्प है ._

# on Mac OS X
# /usr/bin/tar -> bsdtar
ls -l /usr/bin/tar    

# from man bsdtar
--disable-copyfile
        Mac OS X specific.  Disable the use of copyfile(3).

3
साथ bsdtar 2.8.3 - libarchive 2.8.3के दस्तावेज नहीं है, लेकिन फिर भी उपलब्ध। 10.7.5--disable-copyfile
स्टीफन श्मिट

github.com/libarchive/libarchive/commit/… और फ़ोरम.macrumors.com/showthread.php?p=20684196#post20684196 Apple के पुराने दस्तावेज़ों की ओर ध्यान आकर्षित करते हैं।
ग्राहम पेरिन

1

._फ़ाइलों संसाधन कांटे के रूप में अन्य उत्तर में उल्लेख कर रहे हैं। हालांकि, उपयोग करते समय उनमें से छुटकारा पाने का एक बेहतर तरीका है tar:

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

dot_cleanइन फ़ाइलों की सफाई के लिए एक उपयोगिता भी है (मुझे लगता है कि यह आमतौर पर बाहरी भंडारण के लिए उपयोग किया जाता है)।


धन्यवाद! उस समाधान के लिए मेरे उपरोक्त उत्तर का अंत देखें।
जेसी बेडर

dot_clean इसके लिए काम नहीं करता है क्योंकि टार फाइलें बना रहा है
joedevon

0

यहाँ उन फ़ाइलों को हटाने के लिए एक अजगर स्क्रिप्ट है। किसी भी लोकप्रिय ओएस में काम करना चाहिए।

पूरी तरह से परीक्षण नहीं , अपने जोखिम पर उपयोग करें!

import os
import os.path

def dot_clean(folder):
    files = os.listdir(folder)
    for file in files:
        full_name = folder + "/" + file
        if os.path.isdir(full_name):
            dot_clean(full_name)
        elif file.startswith("._"):
            os.remove(full_name)

dot_clean('.')            

1
खैर, HFS के साथ ओएस एक्स के लिए छोड़कर + ...
डैनियल बेक

क्यों नहीं? क्या आप सुझाव दे सकते हैं कि कैसे ठीक करें?
ऐवर

1
ये फ़ाइलें वास्तव में HFS + पर मौजूद नहीं हैं, क्योंकि फाइल सिस्टम मेटाडेटा को आंतरिक रूप से संग्रहीत कर सकता है। ये फ़ाइलें फ़ाइल सिस्टम के लिए एक वर्कअराउंड हैं जो समर्थन नहीं करती हैं, उदाहरण के लिए जब आप HFS + से एक FAT USB अंगूठे ड्राइव में फ़ाइलों को स्थानांतरित करते हैं, तो वे अस्तित्व में आते हैं, और जब आप उन्हें वापस स्थानांतरित करते हैं, तो वे गायब हो जाते हैं।
डैनियल बेक

-3

अवधि वर्ण, "।", का उपयोग मैक प्लेटफ़ॉर्म पर एक छिपे हुए फ़ाइल संकेतक के रूप में किया जाता है। विंडोज पर, यह "$" चरित्र है। वैसे भी, ._foo फाइल में शायद कुछ OS X की विशिष्ट जानकारी है और मैं इसे हटाने के खिलाफ सुझाव दूंगा। अन्य प्रणालियों पर आपको इसे अनदेखा करना होगा, या यहां कोई व्यक्ति आपको एक स्क्रिप्ट प्रदान करने में सक्षम हो सकता है जो उन फ़ाइलों और फ़ोल्डरों को छिपाएगा जो "" के साथ शुरू होते हैं।


यह सभी मेटाडेटा है, ज्यादातर चीजें जैसे कि कस्टम आइकन, एप्लिकेशन जिसने फ़ाइल बनाई है आदि। यह हटाना सुरक्षित है।
ड्रीमलैक्स

फिर भी, यदि आप मुख्य रूप से मैक का उपयोग करते हैं तो मैं इसे रखने की सलाह दूंगा। यदि आप ओएस एक्स से अधिक विंडोज का उपयोग करते हैं, तो आगे बढ़ें और इसे मार दें।
dbmikus

(@dreamlax) यह सच है कि विस्तारित विशेषताओं में संग्रहीत अधिकांश डेटा मेटाडेटा है जिसे हटाना सुरक्षित हो सकता है, लेकिन यह हमेशा ऐसा नहीं होता है। विशेष रूप से, जब "संसाधन कांटे" वाली फाइलें HFS व्युत्पन्न (एफएटी, यूएफएस, टार, आदि) ऐसी किसी चीज पर संग्रहीत की जाती हैं, तो इन '._ *' फाइलों का उपयोग (अन्य विस्तारित विशेषताओं के बीच) से डेटा रखने के लिए किया जाता है। संसाधन कांटे। जबकि कई फ़ाइल प्रारूप संसाधन कांटे (बंडलों की ओर) का उपयोग करने से दूर जा रहे हैं, कुछ फाइलें हैं जहां संसाधन कांटे में महत्वपूर्ण डेटा संग्रहीत किया जाता है (कभी-कभी संसाधन डेटा एकमात्र डेटा होता है)।
क्रिस जॉन्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.