我正在尝试使用这种内部结构(简化)提取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
仅包含a
和b
之后)覆盖整个目录,而不是将内容合并在一起。在 的覆盖控制部分tar manpage
,似乎只是覆盖现有文件和目录的元数据,事实并非如此。
有什么办法可以让我在这里tar
演示rsync
类似的行为吗?提前致谢!
PS:如果重要的话,My/share
是指向 的符号链接/usr/share
。
如果最初/bin
是符号链接,那么您使用的命令将删除符号链接并在其位置创建一个新目录。
在手册中阅读更多内容(强调我的):
从存档中读取时,
--dereference
(-h
) 选项会导致tar
在tar
写入或读取存档中命名的文件时遵循已存在的符号链接。通常,tar
不遵循这样的链接,尽管它可能会在写入新文件之前删除该链接。[…]该
--dereference
选项不安全 […]
注意目录也是文件。
您既未使用也--dereference
未-h
删除链接可能发生的情况。
链接指向的目录还在某处,它的内容没有被删除。尽管如此,由于工具/bin
非常重要,您的操作系统可能会瘫痪。要解决此问题,您需要重新创建原始链接:删除新/bin
目录并使用ln -s target /bin
.
不幸的是,我无法确定链接的目标是什么,您需要猜测或找出target
应该是什么。也许 /usr/bin
。
与/share
.
如果您仍处于登录状态或者可以重新登录,那么修复在技术上应该是可行的,因为您需要的所有工具都应该在某个地方。如果您失去了访问权限(例如,您无法登录,因为/bin/bash
是您的登录 shell 而它不存在),则可以选择启动实时发行版并从那里进行修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句