root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
如何解决此问题并将
/
保留在文件名中?#1 楼
使用--absolute-names
或-P
选项可禁用此功能。tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
评论
这是正确的答案,但请注意,在大多数情况下,这不是您想要的,因为它会导致归档文件提取出完整的路径!
–rubo77
13年11月21日在10:04
如果这是您的主要目标,则使用@Marcus答案中所述的-C /选项将摆脱STDERR消息。
–马特·桑德斯(Matt Sanders)
13年12月28日在22:29
正如@ rubo77所评论的那样,通常这不是命令的预期结果。
– alfredocambera
16年8月25日在15:16
在大多数情况下,这并不是用户想要的,这仅仅是因为他们中的大多数人直到需要时才阅读手册(没有人有时间这样做)。因此,至少扩大您的答案,警告人们不要这样做是明智的,除非他们绝对确定他们了解它的作用。尤其是被接受为答案。
–满载B.
17年2月2日在7:16
太好了,为什么不举个例子呢?这些命令去哪里了?在最后?开始?在两者之间?
– Toskan
18年9月5日在5:20
#2 楼
这实际上是一个功能,不是问题。具有绝对位置的存档会带来安全风险。攻击者可能会使用此类存档来诱骗用户在关键系统位置安装文件。是的,您可以使用
-P
。但是,允许tar删除正斜杠,而仅要求归档用户明确地在根目录中进行提取,这有什么问题呢?然后它们会自觉地影响关键系统的位置,并且不会偶然发生。评论
有时功能是问题。我在设置一个备份脚本后发现了这个线程,该备份脚本会以电子邮件发送来自tar的非零退出状态的电子邮件。该特定消息导致tar以状态1退出,这导致我在成功备份时收到错误的电子邮件警报,仅是因为tar正在将该消息写入STDERR。我使用@Marcus解决方案的调整版来解决此问题:cd / path / to / network / share && tar -cJf scripts.backup.tar.xz -C / home / user / scripts 2> / dev / null | | [发送电子邮件警报]
–胭脂
2015年12月14日19:14
我认为有一些使用-P的用例-例如,如果要在FUSE中提供某种文件系统快照功能。从用户的角度来看,有时您可能想将快照解压缩到特定目录中,而不是cwd中。
–DIMMSum
16-11-28在4:11
#3 楼
如果您想摆脱打印到STDERR的“从成员名称中删除开头的'/'”,但仍然希望像tar明智地那样保留那些开头的斜杠,那么我在此处看到了评论者timsoft的出色解决方案。 />解决方案涉及使用-C选项将目录更改为根目录(/),然后指定要归档的文件树而没有前导斜线,因为现在只需要相对路径即可。这与普通的tar create命令具有相同的作用,但是不需要剥离:
tar fcz bkup.tar.gz -C / home/foo/
评论
它不适用于增量备份。但是一个很好的答案。
– Gajdipajti
2014年8月5日在7:12
如果您要以shell扩展表示的tar文件(例如tar c -C / home / foo / *)也无法使用,因为shell不知道更改后的根目录。但是对于其他情况仍然是一个很好的答案。
–鲍里斯(Boris)
2015年4月15日在6:27
-C /对我不起作用,期间。对于我来说,这并不能阻止stderr。
–触角
15年8月10日在7:45
@ A-B-B确保-C /之后的路径是相对的。
–zurfyx
16 Dec 31'在10:17
如果用户对根目录没有权限,这种方法行得通吗?
–满载B.
17 Dec 2'在7:20
#4 楼
延迟了一个月,但是我发现适合我的情况(在shell脚本中)的最合适的解决方案是转到父目录并在该目录中执行命令。cd /var/www/
tar -czf mysite.gz mysite
代替:
tar -czf /var/www/mysite.gz /var/www/mysite
评论
确实,您可以使用以下命令完成此操作:tar -zcvf mysite.gz -C / var / www / mysite /这样的好处是您可以从任何目录执行它
– alfredocambera
16年8月25日在15:19
感谢您的帮助。这就是我所需要的。我不需要压缩包中的完整路径,而只需要目标文件夹。
–克里斯蒂亚(Christia)
17年1月11日,下午1:37
我认为这可能应该被接受为正确答案。
–满载B.
17年2月2日在7:19
我完全看不出如何回答这个问题。这是可以做的不同的事情。 …………喜欢:……问:我怎么从洛杉矶到纽约? A:去旧金山吧。
– G-Man说“恢复莫妮卡”
18年5月2日在20:49
我同意@ G-Man。这将导致tar文件具有完全不同的目录结构。在某些情况下,该目录结构实际上首先更合适,但不能回答问题。
–凯文·基恩(Kevin Keane)
18年7月7日在18:34
#5 楼
这是我通过蛮力方法做到的:2>&1 | grep -v "Removing leading"
。例如:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
评论
问题在于它隐藏了错误代码。因此,如果您想在bash脚本中从tar检查错误代码,则成功后不会返回0。
–布赖恩
15年4月7日在15:19
@staticx,无论错误代码为0。
–触角
2015年8月10日在7:58
@ A-B-B如果发生致命错误,我的tar命令可能会返回2。
–Jite
15年11月2日在15:46
@Brian您可以使用$ PIPESTATUS获取退出代码。参见unix.stackexchange.com/questions/14270/…
–简单用户
16-09-10 17:13
#6 楼
尝试仅将-C
用于路径,这会阻止使用完整路径进行压缩:root@server # tar fcz bkup.tar.gz -C /home/ foo/
#7 楼
我用以下方法解决了这个问题:cd /home/foo && tar czf ~/backup.tar.gz .
这样,您就不会首先尝试将绝对路径放入tar存档中。如果要将其解压缩到文件系统的根目录,则只需在传输后
cd / && tar xzf backupt.tar.gz
。#8 楼
如果指定了归档文件的路径,则会引起此参考消息,您可以执行以下操作来解决此问题:tar -zvcf /tmp/mike.tar.gz -P /tmp/mike
或
tar -zvcf mike.tar.gz -P /tmp/mike
或
tar -zvcf mike.tar.gz /tmp/mike
注意:这不是错误,仅供参考。
#9 楼
它不是功能,而是错误。如果以某种方式获取路径数据,删除绝对路径将创建不可解压缩的存档。 tar吐出错误并拒绝提取任何内容。最好先使用tardy过滤路径。评论
欢迎来到该站点,并感谢您的贡献。 “傻瓜”到底是什么意思?提取在创建过程中前导/已删除的TAR归档文件后,遇到了哪个错误?您的评论适用于哪些TAR版本?使用GNU tar时,在提取过程中我当然没有遇到任何问题。
– AdminBee
20年8月21日在9:52
评论
究竟是什么无法正常工作?这不成问题。您不希望tar归档文件中的前导斜杠。说真的如果要将档案解压缩到系统根目录,请在解压缩时指定-C /。