2

这个问题指出,在创建 tar 存档时可能会覆盖文件,我正在尝试了解如何避免这种情况。

通常,我会使用文件滚轮,但安装的版本有点高(使用 1.1 Gb 内存),而且我不是系统管理员。

我查看了 --confirmation 和 --interactive,但它只询问我是否要将文件 x 添加到存档中,而不是是否要覆盖现有文件。例如,

tar --interactive -czvf innocent_text_file.txt foo*

会询问我有关每个文件的信息,但非常乐意覆盖无辜_text_file.txt

是否有任何类似于 -i for cp 的开关?

注意我问的是创建档案,而不是提取档案。

澄清我担心的是不小心做这样的事情

tar -czvf * #Don't do this!

这将覆盖 glob 中列出的第一个文件。为了避免这种情况,如果提到的第一个文件已经存在,我希望 tar 抱怨,比如

cp -i * #Don't do this!

将检查它是否会导致您覆盖现有文件。

4

4 回答 4

1

如果我正确理解你的问题,我相信这应该是诀窍:

焦油 -cv * | gzip > myfile.tgz

于 2010-03-30T04:12:45.587 回答
1

如果我正确理解了您的问题,这应该可以解决问题

-k, --keep-old-files 保留现有文件;不要从存档中覆盖它们

于 2009-07-14T01:13:49.767 回答
0

“u”(更新)而不是“c”(创建)呢?例如,tar -uzvf

如果文件比存档中的文件新,那应该只添加(并覆盖)文件。

于 2009-07-14T01:15:28.920 回答
0

这些是从 tar提取时覆盖控件。

Overwrite control:

-k, --keep-old-files  don't replace existing files when extracting
  --keep-newer-files  don't replace existing files that are newer than
                      their archive copies
  --no-overwrite-dir  preserve metadata of existing directories
  --overwrite         overwrite existing files when extracting
  --overwrite-dir     overwrite metadata of existing directories when
                      extracting (default)
  --recursive-unlink  empty hierarchies prior to extracting directory
  --remove-files      remove files after adding them to the archive

但是,您参考cp -itar c操作以供参考。
这意味着您有兴趣更新不会用新版本覆盖 tar 中现有副本的存档。我怀疑 tar 不能直接使用控制。
我也想知道是否需要这样的计划。

但是,解决此问题的一种方法如下。
由于您担心会覆盖归档文件,因此
我们安全地假设您拥有该目录的现有部分 tar(例如 tar files.tar)。

cd base/dir/to/be/tarred 
tar tf path/to/files.tar | sort > archived-files.lst
find . -type f | sort > files.lst
diff archived-files.lst files.lst | grep "^>" | cut -c 3- > new.lst
tar uf -T new.lst

请注意,这update仅适用于未压缩的存档。
因此,如果您的存档是压缩的 gunzip/bunzip2,则在此序列之前适当地使用它。
然后在最后重新压缩它。

于 2009-07-14T01:26:12.183 回答