سؤال توافق نظام التشغيل Linux / OS X tar - يتسبب tarballs الذي تم إنشاؤه على OS X في حدوث أخطاء عند عدم إجادتها في Linux


عندما أطرح ملفات على جهاز Macbook الخاص بي وأقوم بإزالتها في Linux ، أتلقى التحذيرات / الأخطاء التالية بشكل متكرر:


 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

لحسن الحظ ، هذا لا يؤثر على الملفات المخزنة في الأرشيف ، والتي يتم استعادتها بشكل مثالي. ومع ذلك ، فإنه يتسبب في حدوث مشكلات في عدد من السيناريوهات ، خاصة عند التعامل مع عمليات الإنشاء حيث يؤدي رمز فشل غير صفرية الذي تم إرجاعه بواسطة 'tar' إلى إنشاء وتثبيته للتوقف دون داعٍ.

كيف يمكنني الحصول على OS X لبناء ملفات tar التي تلعب بشكل جيد مع بقية عالم Linux؟

أيضًا ، بالنسبة إلى نقاط المكافأة ، يوجد ملف tar tar الذي يتم توزيعه عامًا مع هذه المشكلات. هل هناك طريقة للحصول على لينكس للتعامل مع ملف القطران برشاقة بدون تغيير الطريقة التي تم ضغطها في الأصل؟


93
2017-08-03 21:47


الأصل




الأجوبة:


أنا غوغد لرسالة الخطأ ويبدو مثل القطران BSD مقابل غنو tar القضية.

قم بتثبيت جنو tar إذا كنت تستطيع على نظام التشغيل Mac واستخدام ذلك لإنشاء tar.


65
2017-08-03 22:00



يستخدم نظام التشغيل Mac OS X 10.6 القطران BSD افتراضيًا ، ولكنه يشحن أيضًا مع gnutar /usr/bin/gnutar.
Ned. شكرا. هذا هو معلومات جيدة. - Dave Dopson
لم يتم شحن / usr / bin / gnutar بعد الآن مع نظام التشغيل Mac OS X (على الأقل اعتبارًا من مافريكس) - foobar
ميناء sudo تثبيت gnutar cd / usr / bin sudo rm tar sudo ln -s / opt / local / bin / gnutar tar - chaosless
في حالة استخدام MacPorts ، يمكنك أيضًا وضع / opt / local / libexec / gnubin / أعلى PATH بدلاً من إزالة أي شيء من / usr / bin أو إنشاء رموز رمزية يدويًا. - Lorrin


إذا كنت تستخدم Mavericks أو أحدث ، فلن يتم إدراج gnutar بشكل افتراضي.

العمل ، إذا كنت تستخدم البيرة ، هو تنفيذ ما يلي:

brew install gnu-tar

يمكنك بعد ذلك استخدام الأمر gtar من أجل توافق linux.


إذا كنت تريد استبدال tar مع gtar، ببساطة استبدال symlink

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

لاستعادة القطران الأصلي المقدم مع نظام التشغيل Mac OS X ، قم بتشغيل الأوامر المذكورة أعلاه ولكن استبدلها which gtar مع which bsdtar

مصدر:
https://github.com/jordansissel/fpm/issues/576


54
2017-12-14 02:31



لا حاجة إلى إلغاء الربط بعد الآن ، كما يرشدك الشراب ، يمكنك فقط إضافة هذا إلى PATH .bashrc (أو ما يعادله): PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" - Bryan Petty
أو مجرد إنشاء tar وصلة في /usr/local/bin بواسطة cd /usr/local/bin ; ln -s gtar tar - ربما أبسط خيار - Karthik T


لا يحب القطران GNU بعض المعلومات الاختيارية التي يتضمنها قطر OSD BSD الافتراضي.

سوف تسمح لك قنينة جنو بقمع هذه التحذيرات مع الخيار:

--warning=no-unknown-keyword

نرى: https://www.gnu.org/software/tar/manual/html_section/tar_27.html

تجدر الإشارة إلى أن قناة BSD tar لا تدعم هذا العلم ، لذا إذا كنت بحاجة إلى تشغيل نفس شفرة التفريغ على جميع الأنظمة الأساسية ، فيمكنك استخدام ما يلي:

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

21
2018-06-03 14:30



هذا يجب أن يكون الجواب الصحيح لأنه لا ينطوي على تثبيت أداة جديدة تماما من أجل قمع تحذير واحد. - c z


لاستخراج ملف tar بشكل صحيح دون أي أخطاء على نظام لينكس يمكنك استخدام bsdtar.

sudo apt-get install bsdtar

ثم استخدم كالمعتاد.

bsdtar -xvf file.tar أين file.tar هو ملف tar الذي تريد استخراجه.

مصدر:  https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314

بدلاً من ذلك ، يمكنك أيضًا استخدام بكرة ملف جنوم.


9
2018-05-06 17:36





COPYFILE_DISABLE=1 tar cf filename.tar

أو

tar --disable-copyfile cf filename.tar

هذه هي الميزة الأقل قابلية للاكتشاف في tar على OS X التي أعرفها شخصياً.

أنظر أيضا لماذا أحصل على ملفات مثل ._foo في tarball الخاص بي على OS X؟


تحرير: يبدو أن هذا قد يوقف فقط إنشاء غير المرغوب فيه ._foo-نوع الملفات ، لا يوقف إنشاء الرأس (على الأقل في Yosemite / 10.10) ؛ شكرا المعلقين للإشارة إلى ذلك. ومع ذلك ، (للحصول على نقاط المكافأة :) يمكنك التعامل مع مثل هذه الكرات من خلال استخراج مثل هذه:

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

هذا العمل باستخدام gnu قطره 1.15.1 ، وهو قديم جدا! بدلا من ذلك ، يمكنك استخدام pax بدلا من ذلك ، (بالنسبة لي) يلقي المعلومات الإضافية في PaxHeader الدليل ، ولكن على الأقل الخروج دون أخطاء:

pax -rf filename.tar

5
2018-03-04 20:30



للأسف ، هذا لا يبدو لوقف تحذيرات الكلمة الرئيسية الموسعة عند untarring مع جنوتار. - JJC
لا يبدو أن أيا منهما يعمل على يوسمايت (tar --version يشير bsdtar 2.8.3 - libarchive 2.8.3). أنا أيضا بحاجة إلى اندفاعة من قبل cf في الحالة الأخيرة. - tripleee


MacOSX يأتي مع gnutar بالفعل. إذا كنت تريد حلًا سريعًا وقذرًا ، أضف هذا إلى ~/.bash_profile

alias tar='gnutar'

و اهرب source ~/.bash_profile للتحديث

بالإضافة إلى ذلك ، يشحن OSX مع القطران GNU و BSD. لذلك يمكنك أيضًا إلغاء ربط ref tar من bsd إلى gnu:

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

3
2018-02-21 16:25



لماذا في /etc/hosts؟ /etc/hosts هو تعيين المضيف / IP ، أليس كذلك؟ - BenjiWiebe
ما قالهBenjiWiebe. الجزء الأسوأ من ذلك هو تحرير / etc / hosts. أعتقد أنك تقصد ~ /. bashrc - Dave Dopson
على OS X ، .bashrc لم يتم تحميلها لجلسات عمل المحطة الطرفية. انت تحتاج .bash_profile، حيث يتم بدء shell تسجيل الدخول مع إطار المحطة طرفية جديدة. / ccBenjiWiebe - slhck
صحيح :-) كنت أعمل أيضًا في / etc / hosts في ذلك الوقت ، لذلك تم بثه على لوحة المفاتيح. مسكة جيدة - Du3


شكرا لكم. هذا الموضوع كان مفيدا للغاية. إذا كنت تستخدم 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/[yourname]/.profile

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

قم بإنهاء und وإعادة تشغيل إطار المحطة الطرفية.


2
2018-01-04 15:08





نعم ، ثنائي القوائم المدمج في نظام ماكينتوش يضيف مجموعة من الأشياء الإضافية التي لا يحبها CentOS. لإصلاح هذا قم بما يلي:

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

امل ان يساعد!


1
2018-02-07 18:28



هذا طريق واحد. أنا حل قضية جنو / بي إس دي بشكل أشمل في github.com/ddopson/dotfiles. لدي ~ / بن / coreutils في وقت مبكر من المسار ، وهناك الحشوات صغيرة في مثل هناك github.com/ddopson/dotfiles/blob/master/bin/coreutils/tar التي تختار الملف التنفيذي الصحيح على أساس لينكس مقابل ماك وإذا تم تعيين متغير البيئة COREUTILS - Dave Dopson
قد ترغب في تعديل تعليماتك لإخبار الأشخاص بالتحقق من وجود / usr / bin / gnutar قبل نقل tar tar. يمكن للمبتدئين العثور على هذا باستخدام google ولا يعرفون كيفية فك نظامهم. - msouth
ربما هذا ليس فكرة جيدة ، لبضع من الأسباب. 1) الآن لا تعرف حزم Apple مكان العثور على القطران الأصلي ، القطران الذي يعرف كيفية التعامل مع سمات ملف Apple. 2) إذا كان لابد من استخدام قار GNU ، فإن المكان المناسب لوضعه هو أمامك في مسار البحث الخاص بك ، مثل / usr / local / bin ، أو شيء ما ، و 3) من المحتمل أكثر أمانًا للاتصال بالأجنبية tarبرنامج gnutar لتجنب الخلط بين البرامج التي تتوقع أن يتصرف ماك مثل ماك. $ 0.02. -Erik - Erik Bennett