如何更新 tar(不追加)

问题描述 投票:0回答:5

我想用 较新的 文件更新现有的 tar 文件。

在 GNU,我读到:

4.2.3 更新档案

在上一节中,您学习了如何使用“--append”添加 文件到现有存档。相关操作是“--update”(“-u”)。 “--update”操作通过比较日期来更新 tar 存档 指定的存档成员与文件的日期 同名。如果文件的修改时间比 archive 成员,然后将文件的较新版本添加到 存档(与“--append”一样).

然而, 当我运行 tar update 命令时,即使文件的修改日期完全相同,它们也会被附加。我只想附加要压缩的文件的修改日期比 tar 中已有的修改日期更新的位置...

tar -uf ./tarfile.tar /localdirectory/ >/dev/null 2>&1

目前,每次更新,tar 的大小都会加倍......

linux bash compression tar
5个回答
3
投票

您描述的更新意味着存档中的文件已被替换。如果新副本小于存档中的副本,则可以直接重写。然而,如果新副本较大,tar 必须将现有存档条目清零并追加。此类更新将留下 ' 或其他未使用的字节,因此任何普通计算机用户都希望删除此类部分,这可以通过将包含存档内容的字节“向上移动”到文件的开头来完成(想想 C 的记忆移动)。

然而,这种就地移动操作会涉及查找-读取-查找-写入周期,是“成本高昂”的,特别是当您在磁带的上下文中查看它时(tar 最初是为磁带设计的),即带有寻道性能是硬盘无法比拟的。通过这样的移动操作,磁带很快就会磨损。哦,当然,WORM 设备也不支持此移动操作。


2
投票
-P

开关,则如果当前目录是我们要更新的目录的

parent
目录,并且
tar -u...
命令中该目录的路径将正常工作, 不是是绝对路径。
例如:
我们想要更新目录 /home/blabla/Dir。我们这样做: tar

一般来说,更新必须从创建的同一位置进行,以便路径一致。

也是可以的:
cd /home/blabla  
tar -u -f tarfile.tar Dir  


您每次都可以简单地创建(而不是更新)存档:

1
投票
cd /home/blabla/Dir tar -u -f /path/to/tarfile.tar .

这将解决您的存档大小每次翻倍的问题。但当然,它每次都会生成整个档案。

    

默认情况下,tar 会从成员名称中删除前导

tar -cvpf tarfile.tar *

1
投票

因此,如果您要归档绝对路径,则需要

/
并使用相对路径,或者添加

cd /

选项。

-P/--absolute-names
cd /
tar -uf "$OLDPWD/tarfile.tar" localdirectory/ >/dev/null 2>&1

但是,更新的项目仍会附加。 
tar -cPf tarfile.tar /localdirectory/ >/dev/null 2>&1 tar -uPf tarfile.tar /localdirectory/ >/dev/null 2>&1
 (
tar

ape

t
chive) 文件只能通过附加方式进行修改。
    
警告!当谈到“日期”时,它意味着

任何

0
投票

如果您的文件以任何此类方式被访问(一个简单的 ar 就足够了),那么 tar 就可以做它所做的事情!

你需要找到另一种方式来做你想做的事。可能使用哨兵文件并查看其修改日期是否小于您要附加的文件。

    

© www.soinside.com 2019 - 2024. All rights reserved.