我如何获得OS X可以构建可与Linux其余部分完美配合的tar文件吗?有什么方法可以使Linux优雅地处理tar文件而不更改其原始压缩方式?
#1 楼
我在Google上搜索了错误消息,似乎是BSD tar与GNUtar
的问题。#2 楼
如果您使用的是Mavericks或更高版本,则默认情况下不再包括gnutar。如果使用自制软件,解决方法是执行以下操作:
brew install gnu-tar
然后可以使用命令
gtar
来实现Linux兼容性。 如果要用
tar
替换gtar
,只需替换符号链接OS X,运行以上命令,但将which gtar
替换为which bsdtar
来源:https://github.com/jordansissel/fpm/issues/576
评论
按照brew的指示,不再需要取消链接,您可以将其添加到.bashrc(或等效文件)中的PATH中:PATH =“ / usr / local / opt / gnu-tar / libexec / gnubin:$ PATH”
–布莱恩·佩蒂(Bryan Petty)
2015年6月10日下午16:13
或者只是通过cd / usr / local / bin在/ usr / local / bin中创建tar链接; ln -s gtar tar-可能是最简单的选项
– Karthik T
16-4-19在3:43
#3 楼
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
评论
这应该是正确的答案,因为它不涉及为了抑制单个警告而安装全新的工具。
– c z
17年5月22日在12:53
#4 楼
要在Linux系统上正确提取tar文件而没有任何错误,可以使用bsdtar。sudo apt-get install bsdtar
然后照常使用。
bsdtar -xvf file.tar
是要提取的tar文件。 来源:https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314
或者,您也可以使用GNOME文件滚轮。
#5 楼
COPYFILE_DISABLE=1 tar cf filename.tar
或
tar --disable-copyfile cf filename.tar
这是我个人在OS X上最难发现的tar功能。 br />另请参见为什么在OS X的压缩包中会得到._foo这样的文件? ,它不会停止创建标头(至少在Yosemite / 10.10上);感谢评论者指出。但是,(为了获得加分:)您可以通过以下方式优雅地处理这样的tarball:
旧!或者,您可以改用pax,它(对我而言)会将多余的信息扔到
._foo
目录中,但至少退出时不会出现错误:tar xf filename.tar --pax-option=delete=SCHILY.*,delete=LIBARCHIVE.*
评论
可悲的是,当使用gnutar解压缩时,这似乎并没有停止扩展标头关键字警告。
– JJC
16-09-21在14:27
这些似乎都不适用于优胜美地(tar --version表示bsdtar 2.8.3-libarchive 2.8.3)。在后一种情况下,我也需要在cf之前加一个破折号。
–tripleee
17年1月31日,12:04
#6 楼
MacOSX已经附带了gnutar。如果需要快速而又肮脏的解决方案,请将其添加到~/.bash_profile
alias tar='gnutar'
,然后运行
source ~/.bash_profile
进行更新此外,OSX随附GNU和BSD焦油。因此,您也可以将tar的引用从bsd取消链接到gnu:
sudo unlink /usr/bin/tar;
sudo ln -s /usr/bin/gnutar /usr/bin/tar
评论
为什么在/ etc / hosts中? / etc / hosts用于主机/ IP映射,对吗?
– BenjiWiebe
13年2月21日在16:47
@BenjiWiebe说了什么。偶数位是编辑/ etc / hosts。我想你的意思是〜/ .bashrc
–戴夫·多普森
13年2月21日在17:57
在OS X上,不会为终端会话加载.bashrc。您需要.bash_profile,因为使用新的Terminal窗口启动了登录Shell。 / cc @BenjiWiebe
–slhck
13年2月21日在19:32
正确:-)当时我也在/ etc / hosts中工作,因此它涌入了键盘。接得好
– Du3
13年2月25日在9:52
#7 楼
谢谢。这个线程非常有用。如果您使用的是MacPorts,请使用以下快速操作方法:到/ Users / [您的名字] /。profilesudo port install gnutar
退出并重新启动终端窗口。
#8 楼
是的,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
希望有所帮助!
评论
那是一种方式。我在github.com/ddopson/dotfiles中更全面地解决了GNU / BSD问题。我在路径的早期有〜/ bin / coreutils,并且那里有一些小垫片,例如github.com/ddopson/dotfiles/blob/master/bin/coreutils/tar,它们基于linux vs Mac以及COREUTILS环境选择正确的可执行文件设置变量
–戴夫·多普森
13年2月8日在2:24
您可能需要修改说明,告诉人们在移动工作tar之前检查/ usr / bin / gnutar的存在。新手可以使用Google找到它,而不知道如何破解他们的系统。
–msouth
2014年5月15日15:18
有几个原因,这可能不是一个好主意。 1)现在,Apple软件包不知道在哪里可以找到本机tar,该tar知道如何处理Apple文件属性。 2)如果必须使用GNU tar,则将其放置在搜索路径的前面是正确的位置,例如/ usr / local / bin等; 3)调用外部tar程序gnutar可能更安全,以避免造成混淆期望Mac像Mac一样运行的软件。 0.02美元。埃里克
–埃里克·贝内特(Erik Bennett)
17年9月12日在14:42
#9 楼
好的,我使用Google搜索,但是前三个链接证实了我怀疑您的tar错误和/或两个tar实用程序之间的不兼容性。请参阅此链接。有人报告说“使用“ bsdtar -xvf”有效。
编辑:您在Mac系统上,我想是相反的方法。您将需要使用gnutar,如果尚未安装,则应已安装。当然,您可以通过搜索自己查看其他链接。
#10 楼
在MAC OSX上安装gnu-tarbrew install gnu-tar
,然后使用以下命令创建与Linux兼容的tar:
gtar -c -f your_tar_file files
您可以使用pax格式创建归档文件
tar -c --format pax -f your_tar_file files
评论
Mac OS X 10.6默认情况下使用BSD tar,但在/ usr / bin / gnutar也附带了gnutar。
–内德·迪利(Ned Deily)
2011年8月3日在22:03
@内德谢谢。这是好信息。
–戴夫·多普森
2011年8月4日,0:31
仅供参考:/ usr / bin / gnutar不再与Mac OS X一起提供(至少从Mavericks开始)
–foobar
13年11月27日在13:52
sudo端口安装gnutar cd / usr / bin sudo rm tar sudo ln -s / opt / local / bin / gnutar tar
–混乱
2014年10月31日,0:41
如果使用MacPorts,也可以将/ opt / local / libexec / gnubin /放在PATH的顶部,而不是从/ usr / bin中删除任何内容或手动创建符号链接。
–洛林
17年2月13日在22:57