在不覆盖现有文件的情况下将 tarball 解压缩到目标目录

SuibianP

我正在尝试使用这种内部结构(简化)提取tarball

[edit: added toplevel dir]

some_tarball.tar
└── some_tarball/
    ├── bin/
    │   ├── a
    │   └── b
    └── share/
        └── man/
            └── man1/
                ├── a.1.gz
                └── b.1.gz

随着安装此来的目的/bin/share迪尔斯,我使用的命令sudo tar xzf some_tarball.tar --strip-components 1 -C /

但是,这最终会用其内容(即/bin仅包含ab之后)覆盖整个目录,而不是将内容合并在一起。在 的覆盖控制部分tar manpage,似乎只是覆盖现有文件和目录元数据,事实并非如此。

有什么办法可以让我在这里tar演示rsync类似的行为吗?提前致谢!

PS:如果重要的话,My/share是指向 的符号链接/usr/share

卡米尔·马乔罗夫斯基

如果最初/bin是符号链接,那么您使用的命令将删除符号链接并在其位置创建一个新目录。

手册中阅读更多内容(强调我的):

从存档中读取时,--dereference( -h) 选项会导致tartar写入或读取存档中命名的文件时遵循已存在的符号链接通常,tar不遵循这样的链接,尽管它可能会在写入新文件之前删除该链接[…]

--dereference选项不安全 […]

注意目录也是文件

您既未使用也--dereference-h删除链接可能发生的情况。

链接指向的目录还在某处,它的内容没有被删除。尽管如此,由于工具/bin非常重要,您的操作系统可能会瘫痪。要解决此问题,您需要重新创建原始链接:删除新/bin目录并使用ln -s target /bin.

不幸的是,我无法确定链接的目标是什么,您需要猜测或找出target应该是什么也许 /usr/bin

/share.

如果您仍处于登录状态或者可以重新登录,那么修复在技术上应该是可行的,因为您需要的所有工具都应该在某个地方。如果您失去了访问权限(例如,您无法登录,因为/bin/bash是您的登录 shell 而它不存在),则可以选择启动实时发行版并从那里进行修复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章