macos – Linux / OS X の tar の非互換性 – OS X で作成された tarball は Linux でtar を解くとエラーになります

command-line linux macos tar

Macbook上のファイルをLinuxでtar化して解凍すると、以下のような警告/エラーが何度も出てきます


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でLinuxの世界の他の部分とうまく遊ぶtarファイルをビルドするにはどうすればいいのでしょうか?

また、ボーナスポイントとして、これらの問題がある tar ファイルが公開されています。元々圧縮されていた方法を変えずに、このtarファイルをLinuxが優雅に扱うようにする方法はありますか?

  111  Dave Dopson  2011-08-03


ベストアンサー

エラーメッセージをググってみたら、BSD tar vs. GNU tar の問題のようです

Mac OS上で可能であればGNU tarをインストールし、それを使ってtarを作成してください

73  holygeek  2011-08-03


Mavericks またはそれ以降を使用している場合、gnutar はデフォルトでは含まれなくなります

homebrewを使用している場合の回避策は、以下のように実行することです

brew install gnu-tar

その後、Linuxとの互換性を保つためにgtarコマンドを使用することができます


targtarに置き換えたい場合は、シンボリックリンクを置き換えるだけです

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

Mac Os Xで提供されているオリジナルのtarを復元するには、上記のコマンドを実行しますが、which gtarwhich bsdtarに置き換えてください

ソースは以下の通りです。 https://github.com/jordansissel/fpm/issues/576

66  spuder  2013-12-14


GNU tar は、デフォルトの OSX BSD tar に含まれるオプション情報のいくつかが気に入らないようです

GNU tar はオプションで警告を抑制することができます

--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

30  Chris  2015-06-03


Linuxシステム上でエラーなく適切にtarファイルを展開するには、bsdtarを使用することができます

sudo apt-get install bsdtar

その後は通常通りに使用してください

bsdtar -xvf file.tar ここで、file.tarは抽出したいtarファイルです

ソースは以下の通りです。https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314

また、GNOME ファイルローラーを使用することもできます

10  daka  2016-05-06


COPYFILE_DISABLE=1 tar cf filename.tar

or

tar --disable-copyfile cf filename.tar

これは私が個人的に意識しているOS Xのtarの中で最も発見しにくい機能です

OS X の tar ボールに ._foo のようなファイルが入っているのはなぜですか?


編集: これは不要な ._foo タイプのファイルの生成を止めるだけのように見えますが、ヘッダの生成は止められません (少なくとも Yosemite/10.10 では)。しかし、(ボーナスポイントとして:)このように抽出することで、このようなタールボールを優雅に扱うことができます

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

これは gnu tar 1.15.1 を使って動作しました。代わりに pax を使うこともできます。これは(私にとっては)余分な情報を PaxHeader ディレクトリに投げますが、少なくともエラーなしで終了します

pax -rf filename.tar

6  Zac Thompson  2015-03-04


MacOSX にはすでに gnutar が付属しています。手っ取り早くて汚い解決策が欲しい場合は、~/.bash_profileにこれを追加してください

alias tar='gnutar'

を実行し、source ~/.bash_profileを実行して更新します

さらに、OSX には GNU と BSD の両方の tar が同梱されています。そのため、BSD から gnu への tar の ref のリンクを解除することもできます

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

4  Du3  2013-02-21


ありがとうございました。このスレッドはとても参考になりました。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'

Quit undを終了し、ターミナルウィンドウを再起動します

2  howdytom  2016-01-04


Mac のビルトイン tar バイナリには、CentOS が嫌う余分なものがたくさん追加されています。これを修正するには、次のようにします

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

役に立つことを願っています

1  Shaheen Ghiassy  2013-02-07


さて、Google検索を使ってみましたが、上位3つのリンクは私が疑っていたことを確認しました

  1. tar AND/ORのバグ
  2. 2 つの tar ユーティリティ間の非互換性 このリンク を参照してください。誰かが「”bsdtar -xvf” を使うとうまくいった」と報告しています

編集: あなたはMacシステムを使っていますが、私は他の方法を考えました。gnutarを使う必要があるでしょう、すでにインストールされているはずです。もちろん、自分で検索して他のリンクを見ることもできます

0  Sudhi  2011-08-03


MAC OSX に gnu-tar をインストールします

brew install gnu-tar

で linux 互換の tar を作成してください

gtar -c -f your_tar_file files

または、pax形式でアーカイブを作成することができます

tar -c --format pax -f your_tar_file files

0  msadek  2018-08-06


タイトルとURLをコピーしました