छिपी हुई फ़ाइलों को छोड़कर, एक निर्देशिका का टार संग्रह बनाएं?


17

मैं एक विशिष्ट निर्देशिका (इसके उप-पाठ्यक्रम के साथ) का एक टार संग्रह बनाना चाहता हूं। लेकिन जब मैं इसे करता हूं, टार कमांड का उपयोग करते हुए, मुझे उन फ़ाइलों की एक सूची मिलती है जिन्हें शामिल किया गया था, उदाहरण के लिए:

a Calendar_final /._ style.css

एक Calendar_final / style.css

जैसा कि आप देख सकते हैं, एक ही फ़ाइल के दो संस्करण हैं। यह हर फ़ाइल के लिए जाता है, और कई हैं। टार आर्काइव से ._ उपसर्ग के साथ, मैं अस्थायी फ़ाइलों को कैसे निकालूँ?


यह मदद कर सकता है: unix.stackexchange.com/questions/2213/…
tshepang

ये अस्थायी फ़ाइलें नहीं हैं, लेकिन OS X फ़ाइल सिस्टम मेटाडेटा का प्रतिनिधित्व करते हैं (यदि मैं गलत नहीं हूँ, तो वे खोजक लेबल, प्रकार और निर्माता कोड, विस्तारित विशेषताएँ, आदि शामिल हैं)। ये फ़ाइलें OS X पर टार बनाने से पहले मौजूद नहीं हैं। संभावित उत्तर इस बात पर निर्भर करते हैं कि आप OS X / HFS + या किसी अन्य सिस्टम पर हैं।
डैनियल बेक

जवाबों:


33

आपने एक टिप्पणी में पोस्ट किया है कि आप एक मैक ओएस एक्स सिस्टम पर काम कर रहे हैं। यह इन ._*फ़ाइलों के उद्देश्य के लिए एक महत्वपूर्ण सुराग है ।

ये ._*संग्रह प्रविष्टियाँ AppleDouble डेटा की चांस हैं जिसमें संबंधित फ़ाइल ( पूर्वस बिना एक ._) से जुड़ी अतिरिक्त जानकारी होती है । वे मैक ओएस एक्स-विशिष्ट कॉपीफाइल (3) फ़ंक्शन के परिवार द्वारा उत्पन्न होते हैं । AppleDouble ब्लब्स स्टोर एक्सेस कंट्रोल डेटा (ACLs) और विस्तारित विशेषताओं (आमतौर पर, फ़ाइंडर झंडे और "संसाधन कांटे", लेकिन किसी भी तरह के डेटा को संग्रहीत करने के लिए xattrs का उपयोग किया जा सकता है)।

मैक-एक्स एक्स आर्काइव टूल ( bsdtar(साथ ही साथ सिम्प्लाइड tar) gnutar, और pax) सिस्टम-सप्लाई ._*किसी भी फाइल के लिए एक आर्काइव मेंबर को उत्पन्न करेगा , जिसके पास इससे जुड़ी कोई भी विस्तारित जानकारी हो; "अनारकली" मोड में, वे उन संग्रह सदस्यों को भी डिकोड करेंगे और संबंधित फ़ाइल में परिणामी विस्तारित जानकारी को लागू करेंगे। यह मैक ओएस एक्स सिस्टम पर संरक्षण और बाद में एचएफएस + फाइलसिस्टम को स्टोर कर सकने वाली सभी सूचनाओं को निकालने के लिए "पूर्ण निष्ठा" संग्रह का उपयोग करता है।

अन्य प्रणालियों पर संबंधित संग्रह उपकरण इन ._*फ़ाइलों को विशेष हैंडलिंग देने के लिए नहीं जानते हैं , इसलिए वे सामान्य फ़ाइलों के रूप में अनपैक्ड हैं। चूंकि अन्य सिस्टम पर ऐसी फाइलें काफी बेकार हैं, इसलिए उन्हें अक्सर "जंक फाइल्स" के रूप में देखा जाता है। इसके विपरीत, अगर एक गैर-मैक ओएस एक्स सिस्टम एक संग्रह बनाता है जिसमें सामान्य फाइलें शामिल होती हैं ._, जो मैक ओएस एक्स अनारकली टूल के साथ विस्तारित जानकारी के रूप में उन फाइलों को डिकोड करने का प्रयास करेगी।

हालाँकि, सिस्टम-सप्लाय किए गए मैक ओएस एक्स आर्काइव्स को बनाने के लिए एक अनिर्दिष्ट (?) तरीका है, जैसा कि वे अन्य यूनिक्स सिस्टम पर करते हैं: COPYFILE_DISABLE पर्यावरण चर। इस चर (किसी भी मूल्य, यहां तक ​​कि खाली स्ट्रिंग) को सेट करना, ._*संग्रहित सदस्यों को संग्रहीत फ़ाइलों से जुड़ी किसी भी विस्तारित जानकारी का प्रतिनिधित्व करने के लिए संग्रह सदस्यों को उत्पन्न करने से रोकेगा । इसकी उपस्थिति भी संग्रहकर्ताओं को विस्तारित जानकारी के रूप में ऐसे संग्रह सदस्यों की व्याख्या करने की कोशिश करने से रोक देगी।

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

यदि आप इस तरह से काम करना चाहते हैं तो आप इस चर को अपनी शेल की आरंभीकरण फ़ाइल में सेट कर सकते हैं।

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

फिर, जब आपको इस सुविधा को फिर से सक्षम करने की जरूरत होती है (विस्तारित जानकारी को संरक्षित / पुनर्स्थापित करने के लिए), तो आप अलग-अलग कमांडों के चर को "अनसेट" कर सकते हैं:

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

मैक ओएस एक्स 10.4 पर आर्काइव भी कुछ ऐसा ही करते हैं, हालांकि वे एक अलग पर्यावरण चर का उपयोग करते हैं: COPY_EXTENDED_ATTRIBUTES_DISABLE


किसी को भी यह काम नहीं देखा? मैं Yosemite पर इस समाधान की कोशिश की है और जब मैं एक AIX बॉक्स पर PaxHeader निर्देशिका खोलना अभी भी उत्पन्न कर रहे हैं
conorgriffin

5

यह काम करना चाहिए:

tar zcf calendar.tgz "a calendar_final" --exclude '.*'

मैंने सोचा कि यह काम किया है, लेकिन वास्तव में जब मैंने संग्रह को अनपैक किया, तो मैंने पाया कि उन्हें शामिल किया गया है: /

अजीब, आप किस संस्करण का उपयोग करते हैं? tar --versionयहाँ GNU 1.23 देता है।
फ्रेडरिक डेविएरट

1
वे फाइलें OS X पर फाइल सिस्टम मेटाडेटा हैं और टार को चलाने से पहले मौजूद नहीं हैं, इसलिए शायद इसे इस तरह से बाहर नहीं किया जा सकता है। वे ओएस एक्स फ़ाइल मेटाडेटा को पुनर्स्थापित करने की अनुमति देने के लिए शामिल हैं, जब दूसरे मैक पर संग्रहीत किया जाता है।
डैनियल बेक

मेरे लिये कार्य करता है। मैं tar vzcf ...यह देखने के लिए उपयोग करने की सलाह देता हूं कि क्या कोई गलत फाइल शामिल थी।
स्ट्राइबिका

@stribika वह ओएस एक्स पर सबसे अधिक संभावना है। प्रश्न पर मेरी टिप्पणी देखें। फ़ाइलों को बाहर नहीं रखा जा सकता क्योंकि वे टार संग्रह के बाहर मौजूद नहीं हैं।
डैनियल बेक

2

फ्रेडरिक डेविर्ट ने एक समाधान दिया है जो जीएनयू टार (लिनक्स, साइगविन, फ्रीबीएसडी, ओएसएक्स, संभवतः अन्य) पर काम करता है, लेकिन अन्य सिस्टम जैसे नेटबीएसडी, ओपनबीएसडी या सोलारिस पर नहीं।

POSIX tarकमांड निर्दिष्ट नहीं करता है (क्योंकि यह यूनिक्स वेरिएंट के बीच बहुत ही भिन्न रूप से भिन्न होता है) और paxइसके बजाय कमांड का परिचय देता है । विकल्प का -wमतलब एक संग्रह ( -rअर्क) का उत्पादन करना है , और -xसंग्रह प्रारूप का चयन करता है। विकल्प -s '!BRE!!'उन सभी फ़ाइलों को बाहर करता है जिनका पथ मूल नियमित अभिव्यक्ति BRE से मेल खाता है।

pax -w -x ustar -s '!^.*/\..*$!!' calendar_final >calendar_final.tar

दिलचस्प ... मुझे पैक्स के बारे में नहीं पता था।
गाबे

2

के रूप में bsdtar 3.0.3 - libarchive 3.0.3(और शायद पहले) वहाँ एक नया (मैक ओएस एक्स विशिष्ट) करने का विकल्प है bsdtarनामक आदेश --disable-copyfileके निर्माण को दबाने के लिए ._फ़ाइलें। पुराने संस्करणों में विकल्प tarनहीं है --disable-copyfile, लेकिन पर्यावरण चर COPYFILE_DISABLE=1को सेट करना चाहिए।


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

0

इन कदमों का अनुसरण करें:

  1. सभी ._फ़ाइलों को ढूंढें और उनका उपयोग करके उन्हें सूचीबद्ध करें -lsताकि आप सभी ._फ़ाइलों को देख सकें और अंत में उन्हें हटा सकें।

    find /path/to/directory -type f -iname "._*.*" -ls -delete
    
  2. का उपयोग कर संग्रह बनाएँ।

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