Linux / OS X tar uyumsuzluğu - OS X'te oluşturulan tarball Linux'ta gösterilmeyen hatalar veriyor


106

Macbook'umdaki dosyaları tartıp Linux'ta açtıktan sonra, aşağıdaki uyarıları / hataları tekrar tekrar alıyorum:


 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

Neyse ki, arşivde saklanan ve tamamen geri yüklenen dosyaları etkilemiyor. Ancak, bazı senaryolarda, özellikle 'tar' tarafından döndürülen sıfır olmayan hata kodunun oluşturulmasına ve gereksiz yere durmasına neden olduğu derleme işlemleriyle uğraşırken sorunlara neden olur.

OS X'in Linux dünyasının geri kalanı ile güzelce çalışan tar dosyaları oluşturmasını nasıl sağlayabilirim?

Ayrıca, bonus puanları için, bu konularla ilgili olarak halka açık bir tar dosyası bulunmaktadır. Linux tar dosyasını incelikle ele almak için herhangi bir yolu var mı olmadan orijinal sıkıştırılmış şeklini değiştirerek?

Yanıtlar:


71

Ben hata mesajı için Googled ve GNU tarsorunu vs BSD tar gibi görünüyor .

tarMac OS'de yapabiliyorsanız GNU'yu kurun ve bunu oluşturmak için kullanın tar.


17
Mac OS X 10.6 varsayılan olarak bir BSD katranı kullanır ancak aynı zamanda bir gnutar ile gönderilir /usr/bin/gnutar.

@Ned. Teşekkür. bu iyi bir bilgi.
Dave Dopson

15
FYI: / usr / bin / gnutar artık Mac OS X ile (en azından Mavericks'te olduğu gibi) gönderilmiyor
foobar

sudo port install gnutar cd / usr / bin sudo rm katran sudo ln -s / opt / local / bin / gnutar katran
chaosless

MacPorts kullanıyorsanız, / us / local / libexec / gnubin / komutunu PATH'nizin üst kısmına / usr / bin'den bir şey silmek yerine ya da elle sembolik bağlantılar oluşturmak yerine kullanabilirsiniz.
Lorrin

62

Mavericks veya daha yenisini kullanıyorsanız, gnutar varsayılan olarak dahil edilmez.

Eğer homebrew kullanıyorsanız, etrafınızdaki iş, aşağıdakileri yapmaktır:

brew install gnu-tar

gtarLinux uyumluluğu için bu komutu kullanabilirsiniz .


Eğer değiştirmek istiyorsanız tarile gtarbasitçe sembolik yerine

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

Yukarıdaki komutları çalıştırın ancak onların yerini, Mac Os X ile sağlanan orijinal katran geri yüklemek için which gtarbirliktewhich bsdtar

Kaynak:
https://github.com/jordansissel/fpm/issues/576


4
Artık demlemeye gerek yok, demenin söylediği gibi, bunu PATH'inize .bashrc(veya eşdeğeri) ekleyebilirsiniz :PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
Bryan Petty

1
Ya da sadece bir oluşturmak tarbağlantısını içinde /usr/local/bintarafından cd /usr/local/bin ; ln -s gtar tarmuhtemelen en basit seçenek -
Karthik T

27

GNU katran, OSX BSD katranının içerdiği isteğe bağlı bilgilerin bir kısmından hoşlanmaz.

GNU tar, bu uyarıları aşağıdaki seçeneklerle bastırmanıza izin verir:

--warning=no-unknown-keyword

Bakınız: https://www.gnu.org/software/tar/manual/html_section/tar_27.html

BSD tar'nın bu bayrağı desteklemediğini unutmayın, bu nedenle tüm platformlarda aynı açma kodunu çalıştırmanız gerekirse, aşağıdaki gibi bir şey kullanabilirsiniz:

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
bu doğru cevap olmalıdır çünkü tek bir uyarıyı bastırmak için tamamen yeni bir araç kurulmasını içermez.
cz

10

Tar dosyasını bir Linux sisteminde herhangi bir hata olmadan doğru bir şekilde çıkartmak için bsdtar kullanabilirsiniz.

sudo apt-get install bsdtar

O zaman normal olarak kullanın.

bsdtar -xvf file.tarfile.tarçıkarmak istediğiniz tar dosyası nerede ?

Kaynak: https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314

Alternatif olarak, GNOME dosya silindirini de kullanabilirsiniz.


6
COPYFILE_DISABLE=1 tar cf filename.tar

veya

tar --disable-copyfile cf filename.tar

Bu, kişisel olarak bildiğim OS X üzerindeki katranın en az keşfedilebilir özelliği.

Ayrıca bkz . OS X'te tarball'ımda neden ._foo gibi dosyalar alıyorum?


Düzenleme: Görünüşe göre bu sadece istenmeyen ._footip dosyaların oluşturulmasını durdurabilir, başlık oluşturulmasını durduramaz (en azından Yosemite / 10.10'da); işaret ettiğiniz için teşekkürler. Ancak, (bonus puanları için :) bu tür tarball'ları bu şekilde ayıklayarak zarifçe kullanabilirsiniz:

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

Bu, oldukça eski olan gnu katran 1.15.1 kullanarak çalıştı! Alternatif olarak, bunun yerine pax kullanabilirsiniz, ki bu (benim için) fazladan bilgiyi bir PaxHeaderdizine atar ancak en azından hatasız olarak çıkar:

pax -rf filename.tar

Ne yazık ki, bu, gnutar ile başladığınızda genişletilmiş başlık anahtar kelime uyarılarını durdurmuyor gibi görünüyor.
JJC

Bunların hiçbiri Yosemite üzerinde çalışıyor gibi görünmüyor ( tar --versionbelirtir bsdtar 2.8.3 - libarchive 2.8.3). Ayrıca cfikinci durumda daha önce bir tire ihtiyacım var .
üçlü

4

MacOSX zaten gnutar ile birlikte geliyor. Hızlı ve kirli bir çözüm istiyorsanız, bunu~/.bash_profile

alias tar='gnutar'

ve source ~/.bash_profilegüncellemek için çalıştırın

Ek olarak, OSX hem GNU hem de BSD tar ile birlikte gelir. Yani katran referansını bsd'den gnu'ya bağlayabilirsiniz:

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

1
Neden /etc/hosts? /etc/hostsAna bilgisayar / IP eşlemesi için değil mi?
BenjiWiebe,

1
@BenjiWiebe ne dedi. Odder biti / etc / hosts dosyasını düzenliyor. Ben demek
istedin

2
OS X'te, .bashrcTerminal oturumları için yüklenmedi. .bash_profileBir giriş kabuğu yeni bir Terminal penceresiyle başlatıldığından beri ihtiyacınız var . / cc @BenjiWiebe
slhck

Doğru :-) Ben de o zaman / etc / hosts dosyasında çalışıyordum, bu yüzden klavyeye sıçradı. İyi yakalama
Du3,

2

Teşekkür ederim. Bu konu çok faydalı oldu. Burada MacPorts kullanıyorsanız, nasıl yapılır:

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

Aşağıdaki satırı /Users/LEXyournameedia/.profile dosyasına ekleyin.

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

Çık ve Terminal pencerenizi yeniden başlatın.


1

Yea, Mac'in yerleşik katran ikili değeri, CentOS'un sevmediği bir sürü ekstra madde ekler. Bunu düzeltmek için aşağıdakileri yapın:

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

Umarım yardımcı olur!


Bu bir yol. GNU / BSD meselesini github.com/ddopson/dotfiles adresinde daha kapsamlı bir şekilde çözdüm . Yolun başında ~ / bin / coreutils var ve orada github.com/ddopson/dotfiles/blob/master/bin/coreutils/tar gibi linux vs Mac tabanlı COREUTILS ortamına göre doğru çalıştırmayı seçen küçük şimler var değişken ayarlandı
Dave Dopson

İnsanlara çalışma tarlarını taşımadan önce / usr / bin / gnutar varlığını kontrol etmelerini istemek için talimatlarınızı değiştirmek isteyebilirsiniz. Yeni başlayanlar bunu google kullanarak bulabilir ve sistemlerinin nasıl çözüleceğini bilmezler.
msouth

Bu, muhtemelen birkaç nedenden dolayı iyi bir fikir değildir. 1) Şimdi Apple paketleri, yerel katranı nerede bulacağını, Apple dosya özniteliklerini nasıl kullanacağını bilen katili bilmiyor. 2) GNU tar kullanmanız gerekiyorsa, / usr / local / bin ya da başka bir şey gibi, arama taryolunuzda doğru yerleştiğinden emin olmanız gerekir. 3) Muhtemelen yabancı yazılım gnutarını çağırmak, muhtemelen kafa karıştırıcı yazılımları önlemek için daha güvenlidir. Mac'in Mac gibi çalışmasını beklemek. $ 0.02. -Erik
Erik Bennett

0

Tamam, Google aramasını kullandım, ancak ilk üç bağlantı şüphelendiğim şeyi doğruladı

  1. Katranınızda böcek VE / VEYA
  2. İki katran hizmet programı arasındaki uyumsuzluk Bu bağlantıya
    bakın . Birisi "bsdtar -xvf" kullanmanın "çalıştığını" bildirmiştir.

Düzenleme: Mac sistemdesiniz, başka bir yol düşündüm. Gnutar kullanmanız gerekecektir, kurulmamışsa, zaten kurulmalıdır. Tabii ki, kendiniz arayarak diğer bağlantılara bakabilirsiniz.


0

MAC OSX üzerinde gnu-tar'ı kurun

brew install gnu-tar

daha sonra, linux uyumlu katranınızı şununla oluşturun:

gtar -c -f your_tar_file files

Veya arşivinizi pax formatında oluşturabilirsiniz.

tar -c --format pax -f your_tar_file files
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.