tar -xvf是否从目录中删除现有文件?


10

我有一个tar存档,我想使用tar -xvf
在这个tar归档文件中,我有一个包含几个文件的目录树。在我的solaris 10系统上,该目录树已经存在,并且其中包含多个文件。
如果我解压缩档案,则整个目录树将被覆盖,还是仅压缩档案中包含的文件?
存档中没有通讯员的文件会被删除吗?


您可以始终创建一个测试.tar和一个测试目录并进行尝试...与您自己想出的答案相比,这里答案要长得多。
贾文

答案是不。如果您认真考虑一下,您将意识到,从存档中提取文件的程序将删除完全不相关的文件没有任何意义。
Fosco 2010年

Answers:


6

取决于系统,已经存在的重复文件可能会解压缩,也可能不会解压缩。但是,通常默认情况下会这样做。归档中但系统中没有的文件将被简单地添加到系统中的新目录或现有目录中。

迪尔 /test

/1/a
c

封存 test.tar

/1/b
d

可能会合并为:

/1/a
/1/b
c
d

-k标志添加到tar命令将确保目标目录上的所有文件都不会被覆盖:

tar -xvkf test.tar

@BP:覆盖可能取决于shell,因为csh(Sun上仍是默认的shell?)具有一个“ noclobber” shell变量,该变量在设置时可以防止意外的覆盖行为。
hotei

感谢BloodPhilia和布袋。我已经在系统上进行了测试,并且tar -xvf覆盖了已经存在的文件,并添加了不存在的文件。我想知道的是,是否有可能覆盖整个目录,从而丢失该目录中我系统上但不在归档中的文件?例如:我在dir.tar dir / file2中。在我的系统上,我有dir / file1,dir / file2和dir / file3。如果我执行tar -xvf dir.tar,是否有可能整个目录都将被覆盖并且不再包含file1和file3?
Felicia 2010年

@hotei :(noclobber在POSIX shell中也存在)仅影响>foo在shell中重定向到的文件。它对焦油没有影响。
吉尔斯(Gilles)“所以,别再邪恶了”

@hotei noclobber防止您通过外壳程序中的重定向覆盖文件。因此,echo foo > bar.txt不会覆盖bar.txt(如果存在)。它对程序(例如tar)将覆盖的内容没有影响。
KeithB 2010年

1
@Felicia:根据Single Unix,tar不会删除不在存档中的文件。它将使用存档中的内容(而不是模式)覆盖现有文件。周围可能有不兼容的tar,但我怀疑它们中的任何一个都会覆盖不相关的文件,例如dir/file1
吉尔(Gilles)“所以,别再邪恶了”,2010年

0

最简单的方法是创建一个新的空目录,cd到该目录,然后将文件解压缩到该目录中。尽管提取的文件是相对的(以./开头),而不是绝对的(以/开头),但您需要小心。用更少的内容来传递目录,以了解不知道是哪种情况(tar -tvf tar_filename | less)

您可以通过查看手册页来了解tar版本是否默认覆盖。Tar在提取过程中不会删除文件,这是人们通常在提取之前从新的空目录开始的另一个原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.