Macbookでファイルをtarし、Linuxでuntarすると、次の警告/エラーが繰り返し表示されます。
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ファイルが存在します。 Linuxでtarファイルを適切に処理する方法はありますかwithout元の圧縮方法を変更しますか?
私はエラーメッセージについてグーグルしました、そしてそれはBSD tar vs. GNU tar
問題のようです。
Mac OS上で可能な場合はGNU tar
をインストールし、それを使用してtar
を作成します。
Mavericks以降を使用している場合、gnutarはデフォルトで含まれなくなりました。
自作を使用する場合の回避策は、次のことを実行することです。
brew install gnu-tar
そうすると、Linux互換性のためにコマンドgtar
を使うことができます。
tar
をgtar
に置き換えたい場合は、単にシンボリックリンクを置き換えます。
tar --version
ll `which tar`
Sudo unlink `which tar`
Sudo ln -s `which gtar` /usr/bin/tar
tar --version
Mac OS Xで提供されているオリジナルのtarを復元するには、上記のコマンドを実行しますがwhich gtar
をwhich bsdtar
に置き換えます。
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
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ファイルローラーを使用することもできます。
COPYFILE_DISABLE=1 tar cf filename.tar
または
tar --disable-copyfile cf filename.tar
これは私が個人的に認識しているOS X上のtarの最も発見しにくい機能です。
参照 OS Xのtarballに._fooのようなファイルがあるのはなぜですか?
編集:これは、不要な._foo
-typeファイルの作成を止めるだけで、ヘッダーの作成を止めるわけではないようです(少なくともYosemite/10.10では)。それを指摘してくれてありがとうコメンター。しかし、(ボーナスポイント:)、このようにtarballを適切に抽出することで、そのようなtarballを適切に処理できます。
tar xf filename.tar --pax-option=delete=SCHILY.*,delete=LIBARCHIVE.*
これはかなり古いgnu tar 1.15.1を使ってうまくいきました!別の方法として、代わりにpaxを使用することもできます。これは(私にとっては)余分な情報をPaxHeader
ディレクトリに入れますが、少なくともエラーなしで終了します。
pax -rf filename.tar
MacOSXにはすでにgnutarが付属しています。早くて汚い解決策が必要な場合は、これを~/.bash_profile
に追加してください。
alias tar='gnutar'
そしてsource ~/.bash_profile
を実行して更新します
さらに、OSXはGNUとBSD tarの両方を同梱しています。つまり、tarの参照をbsdからgnuにリンク解除することもできます。
Sudo unlink /usr/bin/tar;
Sudo ln -s /usr/bin/gnutar /usr/bin/tar
ありがとうございました。このスレッドはとても役に立ちました。あなたが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'
元に戻して、ターミナルウィンドウを再起動します。
そう、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
それが役立つことを願っています!
さて、私はグーグル検索を使いました、しかしトップ3のリンクは私が疑ったことを確認しました
編集:あなたはMacシステム上にいます、私は逆に考えました。 gnutarを使う必要があるでしょう。インストールされていなければ、すでにインストールされているはずです。もちろん、自分で検索して他のリンクを調べることもできます。
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