Dav*_*son 113 linux command-line tar macos
当我在 Macbook 上压缩文件并在 Linux 中解压缩它们时,我反复收到以下警告/错误:
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
Run Code Online (Sandbox Code Playgroud)
幸运的是,这不会影响存档中存储的文件,这些文件已完美还原。但是,它确实会在许多情况下引起问题,尤其是在处理由 'tar' 返回的非零故障代码导致构建和安装不必要地停止的构建过程时。
如何让 OS X 构建与 Linux 世界其他部分兼容的 tar 文件?
此外,对于奖励积分,存在包含这些问题的公开分发的 tar 文件。有没有办法让 Linux 优雅地处理 tar 文件而不改变它最初的压缩方式?
hol*_*eek 74
我在 Google 上搜索了错误消息,这似乎是 BSD tar 与 GNU 的tar
问题。
tar
如果可以,请在 Mac OS 上安装 GNU并使用它来创建tar
.
spu*_*der 66
如果您使用的是 Mavericks 或更新版本,则默认情况下不再包含 gnutar。
如果您使用自制软件,解决方法是执行以下操作:
brew install gnu-tar
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该命令gtar
来提高 linux 兼容性。
如果要替换tar
为gtar
,只需替换符号链接
tar --version
ll `which tar`
sudo unlink `which tar`
sudo ln -s `which gtar` /usr/bin/tar
tar --version
Run Code Online (Sandbox Code Playgroud)
要恢复 Mac Os X 提供的原始 tar,请运行上述命令,但替换which gtar
为which bsdtar
来源:https :
//github.com/jordansissel/fpm/issues/576
小智 32
GNU tar 不喜欢默认的 OSX BSD tar 包含的一些可选信息。
GNU tar 将允许您使用以下选项抑制这些警告:
--warning=no-unknown-keyword
Run Code Online (Sandbox Code Playgroud)
请参阅: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
Run Code Online (Sandbox Code Playgroud)
dak*_*aka 10
要在 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
Run Code Online (Sandbox Code Playgroud)
或者
tar --disable-copyfile cf filename.tar
Run Code Online (Sandbox Code Playgroud)
这是我个人知道的 OS X 上 tar 最不容易发现的功能。
另请参阅为什么我在 OS X 上的 tarball 中得到像 ._foo 这样的文件?
编辑:看起来这可能只会停止创建不需要的._foo
-type 文件,它不会停止头创建(至少在 Yosemite/10.10 上);感谢评论者指出。但是,(为了奖励积分:)您可以通过像这样提取它们来优雅地处理这些 tarball:
tar xf filename.tar --pax-option=delete=SCHILY.*,delete=LIBARCHIVE.*
Run Code Online (Sandbox Code Playgroud)
这使用 gnu tar 1.15.1 有效,它已经很旧了!或者,您可以改用 pax,它(对我而言)将额外信息扔到PaxHeader
目录中,但至少退出时不会出错:
pax -rf filename.tar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52522 次 |
最近记录: |