![tar:从成员名称中删除前导“/”](https://linux22.com/image/44170/tar%EF%BC%9A%E4%BB%8E%E6%88%90%E5%91%98%E5%90%8D%E7%A7%B0%E4%B8%AD%E5%88%A0%E9%99%A4%E5%89%8D%E5%AF%BC%E2%80%9C%2F%E2%80%9D.png)
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
我该如何解决这个问题并保留/
文件名?
答案1
如果您想摆脱打印到 STDERR 的“从成员名称中删除前导‘/’”,但仍然想像 tar 明智地默认那样保留那些前导斜杠,我看到了一个很好的解决方案这里由评论者 timsoft 提供。
解决方案包括使用 -C 选项将目录更改为根 (/),然后指定要归档的文件树没有前导斜杠,因为现在您只需要一个相对路径。这与普通的 tar create 命令执行相同的操作,但不需要剥离:
tar fcz bkup.tar.gz -C / home/foo/
答案2
使用--absolute-names
或-P
选项禁用此功能。
tar fczP bkup.tar.gz /home/foo
tar fcz bkup.tar.gz --absolute-names /home/foo
答案3
这实际上是一个功能,而不是一个问题。具有绝对位置的档案存在安全风险。攻击者可以使用此类存档来诱骗用户在关键系统位置安装文件。
是的,你可以使用-P
.但是允许 tar 删除正斜杠并简单地要求存档用户在根目录中显式进行提取有什么问题呢?然后他们就会有意识地影响关键系统位置,并且不会偶然发生。
答案4
这就是我使用暴力方法做到的:2>&1 | grep -v "Removing leading"
。
例如:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"