Gdy spakuję pliki na moim Macbooku i rozpakuję je w Linuksie, wielokrotnie otrzymuję następujące ostrzeżenia / błędy:
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
Na szczęście NIE ma to wpływu na pliki przechowywane w archiwum, które są doskonale przywracane. Jednak powoduje to problemy w wielu scenariuszach, szczególnie w przypadku procesów budowania, w których niezerowy kod błędu zwrócony przez „tar” powoduje niepotrzebne zatrzymanie kompilacji i instalacji.
Jak mogę zmusić OS X do zbudowania plików tar, które dobrze grają z resztą świata Linuksa?
Ponadto w przypadku punktów bonusowych istnieje publicznie dystrybuowany plik tar z tymi problemami. Czy jest jakiś sposób na to, by Linux mógł ładnie obsługiwać plik tar bez zmieniając sposób, w jaki został pierwotnie skompresowany?
źródło
/usr/bin/gnutar
.Jeśli używasz Mavericks lub nowszej wersji, gnutar nie jest już domyślnie dołączany.
Praca z homebrew polega na wykonaniu następujących czynności:
Następnie możesz użyć polecenia
gtar
dla kompatybilności z Linuksem.Jeśli chcesz wymienić
tar
zgtar
, po prostu zastąp dowiązanie symboliczneAby przywrócić oryginalną tar dostarczoną z Mac OS X, uruchom powyższe polecenia, ale zamień
which gtar
zwhich bsdtar
Źródło:
https://github.com/jordansissel/fpm/issues/576
źródło
.bashrc
(lub twój odpowiednik):PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
tar
przyłączać się/usr/local/bin
przezcd /usr/local/bin ; ln -s gtar tar
- być może najprostsza opcjaTar GNU nie lubi niektórych opcjonalnych informacji, które zawiera domyślna tar OSX BSD.
GNU tar pozwoli ci wyłączyć te ostrzeżenia za pomocą opcji:
Widzieć: https://www.gnu.org/software/tar/manual/html_section/tar_27.html
Zauważ, że tar BSD nie obsługuje tej flagi, więc jeśli musisz uruchomić ten sam kod rozpakowania na wszystkich platformach, możesz użyć czegoś takiego:
źródło
Aby poprawnie wyodrębnić plik tar bez żadnych błędów w systemie Linux, możesz użyć bsdtar.
sudo apt-get install bsdtar
Następnie użyj normalnie.
bsdtar -xvf file.tar
gdziefile.tar
to plik tar, który chcesz wyodrębnić.Źródło: https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314
Alternatywnie możesz także użyć rolki plików GNOME.
źródło
lub
Jest to najmniej wykrywalna funkcja tar na OS X, o której osobiście wiem.
Zobacz też Dlaczego dostaję pliki takie jak ._foo do mojego tarballa na OS X?
Edycja: wygląda na to, że może to powstrzymać tworzenie niepożądanych
._foo
-type plików, nie zatrzymuje tworzenia nagłówka (przynajmniej w Yosemite / 10.10); dziękuję komentatorom za wskazanie tego. Jednakże (za punkty bonusowe :) możesz z wdziękiem obsługiwać takie paczki, rozpakowując je w ten sposób:To działało przy użyciu gnu tar 1.15.1, który jest dość stary! Alternatywnie możesz zamiast tego użyć pax, który (dla mnie) wyrzuca dodatkowe informacje do
PaxHeader
katalog, ale przynajmniej kończy się bez błędu:źródło
tar --version
wskazujebsdtar 2.8.3 - libarchive 2.8.3
). Potrzebuję też myślnika wcześniejcf
w tym drugim przypadku.MacOSX jest już wyposażony w gnutar. Jeśli chcesz szybkie i brudne rozwiązanie, dodaj to do
~/.bash_profile
i biegnij
source ~/.bash_profile
aktualizowaćDodatkowo OSX zawiera zarówno tar GNU, jak i BSD. Możesz także odłączyć ref od tar z bsd do gnu:
źródło
/etc/hosts
?/etc/hosts
służy do mapowania hosta / IP, prawda?.bashrc
nie jest załadowany dla sesji terminalu. Potrzebujesz.bash_profile
, ponieważ powłoka logowania jest uruchamiana z nowym oknem terminalu. / cc @BenjiWiebeDziękuję Ci. Ten wątek był bardzo przydatny. Jeśli korzystasz z MacPorts, oto krótki poradnik:
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
Dodaj następującą linię do /Users/[yourname]/.profile
alias tar='/opt/local/libexec/gnubin/tar'
Zamknij i ponownie uruchom okno terminala.
źródło
Tak, wbudowany binarny program Mac dodaje kilka dodatkowych rzeczy, których CentOS nie lubi. Aby to naprawić, wykonaj następujące czynności:
Mam nadzieję, że to pomoże!
źródło
tar
program gnutar, aby uniknąć mylącego oprogramowania oczekującego, że Mac będzie działał jak Mac. 0,02 USD. -ErikDobra, użyłem wyszukiwarki Google, ale trzy pierwsze linki potwierdziły to, co podejrzewałem
Widzieć ten link . Ktoś donosi, że „Korzystanie z bsdtar -xvf” działało. ”Edytować: Jesteś na systemie Mac, pomyślałem inaczej. Musisz użyć gnutar, powinien być zainstalowany, jeśli nie, zainstaluj go. Oczywiście możesz przeglądać inne linki, przeszukując siebie.
źródło
Na MAC OSX zainstaluj gnu-tar
następnie utwórz swoją kompatybilną z Linuksem tar z:
Możesz też utworzyć swoje archiwum w formacie pax
źródło