लिनक्स / ओएस एक्स टार असंगतता - ओएस एक्स पर बनाए गए टैरोबॉल लिनक्स में अप्रतिबंधित होने पर त्रुटियां देते हैं


106

जब मैं अपनी मैकबुक पर फाइलों को टारगेट करता हूं और उन्हें लिनक्स में अनटार्स करता हूं, तो मुझे बार-बार निम्नलिखित चेतावनी / त्रुटियां मिलती हैं:


 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Ignoring unknown extended header keyword `SCHILY.dev'
 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Ignoring unknown extended header keyword `SCHILY.dev'
 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Ignoring unknown extended header keyword `SCHILY.dev'
 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Ignoring unknown extended header keyword `SCHILY.dev'
 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Ignoring unknown extended header keyword `SCHILY.dev'
 tar: Ignoring unknown extended header keyword `SCHILY.ino'
 tar: Ignoring unknown extended header keyword `SCHILY.nlink'
 tar: Error exit delayed from previous errors

सौभाग्य से, यह संग्रह में संग्रहीत फ़ाइलों को प्रभावित नहीं करता है, जो पूरी तरह से बहाल हैं। हालाँकि, यह कई परिदृश्यों में समस्याओं का कारण बनता है, खासकर जब बिल्ड प्रक्रियाओं से निपटने में जहां 'टार' द्वारा लौटाए गए गैर-शून्य विफलता कोड का निर्माण होता है और अनावश्यक रूप से रोकने के लिए स्थापित होता है।

मैं ओएस एक्स कैसे प्राप्त कर सकता हूं टार फाइलें बनाने के लिए जो लिनक्स दुनिया के बाकी हिस्सों के साथ अच्छी तरह से खेलते हैं?

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

जवाबों:


71

मैं त्रुटि संदेश के लिए Googled और यह एक BSD टार बनाम GNU tarसमस्या जैसा लगता है ।

tarयदि आप मैक ओएस पर जीएनयू स्थापित कर सकते हैं और इसे बनाने के लिए उपयोग कर सकते हैं tar


17
मैक ओएस एक्स 10.6 डिफ़ॉल्ट रूप से एक बीएसडी टार का उपयोग करता है, लेकिन साथ ही एक गटर के साथ जहाज भी /usr/bin/gnutar

@Ned। धन्यवाद। यह अच्छी जानकारी है।
डेव डॉपसन

15
FYI करें: / usr / bin / gnutar को Mac OS X (Mavericks के रूप में कम से कम) के साथ अब शिप नहीं किया गया है
foobar

सूडो पोर्ट में गुटरार सीडी / यूएसआर / बिन सूदो आरएम टार सुडो लेन -s / ऑप्ट / लोकल / बिन / गुटरार टार
अराजक

यदि MacPorts का उपयोग कर रहे हैं, तो आप अपने PATH के शीर्ष पर / usr / bin या मैन्युअल रूप से कुछ भी बनाने के बजाय केवल / ऑप्ट / स्थानीय / libexec / gnubin / डाल सकते हैं या मैन्युअल रूप से सहानुभूति बना सकते हैं।
लोरिन

62

यदि आप Mavericks या नए का उपयोग कर रहे हैं, तो अब गटर डिफ़ॉल्ट रूप से शामिल नहीं है।

यदि आप homebrew का उपयोग करते हैं, तो निम्नलिखित कार्य निष्पादित करना है:

brew install gnu-tar

फिर आप gtarलिनक्स कॉम्पेटिबिलिटी के लिए कमांड का उपयोग कर सकते हैं ।


यदि आप के tarसाथ प्रतिस्थापित करना चाहते हैं gtar, तो बस सिमलिंक को बदलें

tar --version
ll `which tar`
sudo unlink `which tar`
sudo ln -s `which gtar` /usr/bin/tar
tar --version

मैक ओएस एक्स के साथ प्रदान किए गए मूल टार को पुनर्स्थापित करने के लिए, उपरोक्त कमांड चलाएं लेकिन which gtarसाथ बदलेंwhich bsdtar

स्रोत:
https://github.com/jordansissel/fpm/issues/576


4
अब और अनलिंक करने की ज़रूरत नहीं है, जैसा कि काढ़ा आपको निर्देश देता है, आप इसे अपने पेटीएच .bashrc(या अपने समकक्ष) में जोड़ सकते हैं :PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
ब्रायन पेटीज

1
या सिर्फ एक बनाने tarमें लिंक /usr/local/binद्वारा cd /usr/local/bin ; ln -s gtar tarसंभवतः सबसे आसान विकल्प -
कार्तिक टी

27

GNU टार को कुछ वैकल्पिक जानकारी पसंद नहीं है, डिफ़ॉल्ट OSX BSD टार शामिल हैं।

GNU टार आपको विकल्प के साथ उन चेतावनियों को दबाने देगा:

--warning=no-unknown-keyword

देखें: https://www.gnu.org/software/tar/manual/html_section/tar_27.html

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

isGnuTar=$(tar --version | grep -q 'gnu')
if [ $? -eq 0 ]
then
    echo "Detected GNU tar"
    tar --warning=no-unknown-keyword -zxf my.tar.gz
else
    tar -zxf my.tar.gz
fi

5
यह सही उत्तर होना चाहिए क्योंकि इसमें एकल चेतावनी को दबाने के लिए एक पूरी तरह से नया उपकरण स्थापित करना शामिल नहीं है।
cz

10

लिनक्स सिस्टम पर बिना किसी त्रुटि के टार फाइल को ठीक से निकालने के लिए आप bsdtar का उपयोग कर सकते हैं।

sudo apt-get install bsdtar

फिर सामान्य रूप से उपयोग करें।

bsdtar -xvf file.tarजहां file.tarटार फ़ाइल आप निकालना चाहते है।

स्रोत: https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314

वैकल्पिक रूप से आप GNOME फ़ाइल रोलर का भी उपयोग कर सकते हैं।


6
COPYFILE_DISABLE=1 tar cf filename.tar

या

tar --disable-copyfile cf filename.tar

यह ओएस एक्स पर टार की सबसे कम खोज योग्य विशेषता है जिसे मैं व्यक्तिगत रूप से जानता हूं।

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


संपादित करें: ऐसा लगता है कि यह केवल अवांछित- ._fooटाइप फ़ाइलों के निर्माण को रोक सकता है , यह हेडर निर्माण (कम से कम Yosemite / 10.10 पर) को रोक नहीं सकता है; इसे इंगित करने के लिए धन्यवाद टिप्पणीकारों। हालाँकि, (बोनस अंक के लिए): आप इस तरह से उन्हें हटाकर इस तरह के टारबॉल को शान से संभाल सकते हैं:

tar xf filename.tar --pax-option=delete=SCHILY.*,delete=LIBARCHIVE.*

यह गन्न टार १.१५.१ का उपयोग कर काम करता है, जो बहुत पुराना है! वैकल्पिक रूप से, आप इसके बजाय पैक्स का उपयोग कर सकते हैं, जो (मेरे लिए) अतिरिक्त जानकारी को एक PaxHeaderनिर्देशिका में फेंक देता है , लेकिन कम से कम बिना त्रुटि के बाहर निकलता है:

pax -rf filename.tar

अफसोस की बात यह है कि यह ग्रेटर के साथ अनट्रेंड होने पर विस्तारित हेडर कीवर्ड चेतावनियों को रोकने के लिए प्रकट नहीं होता है।
JJC

इनमें से कोई भी Yosemite ( tar --versionइंगित करता है bsdtar 2.8.3 - libarchive 2.8.3) पर काम नहीं करता है । इसके अलावा मुझे cfबाद वाले मामले में पहले ही पानी का छींटा चाहिए ।
१२:०५ बजे

4

MacOSX पहले से ही गटर के साथ आता है। यदि आप एक त्वरित और गंदे समाधान चाहते हैं तो इसे जोड़ें~/.bash_profile

alias tar='gnutar'

और source ~/.bash_profileअद्यतन करने के लिए चलाएँ

इसके अतिरिक्त, दोनों GNU और BSD टार के साथ OSX जहाज। तो आप bsd से गन्नू तक के टार को भी अनलिंक कर सकते हैं:

sudo unlink /usr/bin/tar;
sudo ln -s /usr/bin/gnutar /usr/bin/tar

1
में क्यों /etc/hosts? /etc/hostsहोस्ट / आईपी मैपिंग के लिए है, है ना?
बेनजीवेबे

1
@BenjiWiebe ने क्या कहा। सम विषम बिट संपादन / आदि / मेजबान है। मुझे लगता है कि आपका मतलब था ~ / .bashrc
डेव डॉपसन

2
OS X पर, .bashrcटर्मिनल सत्रों के लिए लोड नहीं किया गया है। आपको इसकी आवश्यकता है .bash_profile, क्योंकि एक नई शेल विंडो के साथ लॉगिन शेल शुरू किया गया है। / cc @BenjiWiebe
slhck

सही :-) मैं उस समय / आदि / मेजबानों में भी काम कर रहा था, इसलिए यह कीबोर्ड पर उगल दिया। अच्छी पकड़
ड्यू 3

2

धन्यवाद। यह धागा बहुत उपयोगी था। यदि आप MacPorts का उपयोग कर रहे हैं, तो यह एक त्वरित तरीका है:

sudo port install gnutar

sudo ln -s /usr/local/opt/gnu-tar/libexec/gnubin/tar /usr/bin/gnutar

sudo ln -s /opt/local/libexec/gnubin/tar /usr/bin/gnutar

निम्न पंक्ति को /Users/ Isyournameiding/.profile में जोड़ें

alias tar='/opt/local/libexec/gnubin/tar'

Und से बाहर निकलें और अपनी टर्मिनल विंडो को पुनरारंभ करें।


1

हाँ, मैक का अंतर्निहित टार बाइनरी अतिरिक्त सामान का एक गुच्छा जोड़ता है जो CentOS पसंद नहीं करता है। इसे ठीक करने के लिए निम्नलिखित कार्य करें:

sudo mv /usr/bin/tar /usr/bin/darwintar
sudo ln -s /usr/bin/gnutar /usr/bin/tar
ls -l /usr/bin/tar

उम्मीद है की वो मदद करदे!


यह एक तरीका है। मैंने GNU / BSD मुद्दे को github.com/ddopson/dotfiles में अधिक व्यापक रूप से हल किया । मेरे पास रास्ते में ~ ~ बिन / कोरुटिल्स हैं और वहां छोटे-छोटे शिमले हैं जैसे कि github.com/ddopson/dotfiles/blob/master/bin/coreutils/tar जो लाइनक्स के आधार पर सही एक्जीक्यूटेबल चुनते हैं - मैक और यदि COREUTILS पर्यावरण चर सेट है
डेव डॉपसन

आप अपने निर्देशों को संशोधित करना चाहते हैं ताकि लोगों को उनके काम करने वाले टार को आगे बढ़ाने से पहले / usr / bin / gnutar के अस्तित्व के बारे में बता सकें। Newbies Google का उपयोग करके इसे पा सकते हैं और यह नहीं जानते कि उनके सिस्टम को अन-ब्रेक कैसे करें।
msouth

यह शायद एक अच्छा विचार नहीं है, कुछ कारणों से। 1) अब Apple संकुल को पता नहीं है कि देशी टार कहां मिलेगा, वह टार जो जानता है कि Apple फ़ाइल विशेषताओं को कैसे संभालना है। 2) यदि आपको GNU टार का उपयोग करना चाहिए, तो इसे लगाने का उचित स्थान आपके खोज पथ में आगे है, जैसे / usr / लोकल / बिन, या कुछ और, और 3) यह tarभ्रामक सॉफ़्टवेयर से बचने के लिए विदेशी प्रोग्राम गटर को कॉल करने के लिए अभी भी सुरक्षित है। एक मैक की तरह काम करने की उम्मीद मैक। $ 0.02। -एरिक
एरिक बेनेट

0

ठीक है, मैंने Google खोज का उपयोग किया, लेकिन शीर्ष तीन लिंक ने पुष्टि की कि मुझे क्या संदेह है

  1. बग अपने टार और / या में
  2. दो टार उपयोगिताओं के बीच असंगति यह लिंक
    देखें । वहां कोई व्यक्ति रिपोर्ट करता है कि "bsdtar -xvf" का उपयोग करना "काम करता है।"

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


0

मैक ओएसएक्स पर ग्नू-टार स्थापित करें

brew install gnu-tar

फिर अपना linux संगत टार बनाएं:

gtar -c -f your_tar_file files

या आप अपने संग्रह को पैक्स प्रारूप के साथ बना सकते हैं

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