我想用 较新的 文件更新现有的 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 的大小都会加倍......
您描述的更新意味着存档中的文件已被替换。如果新副本小于存档中的副本,则可以直接重写。然而,如果新副本较大,tar 必须将现有存档条目清零并追加。此类更新将留下 ' 或其他未使用的字节,因此任何普通计算机用户都希望删除此类部分,这可以通过将包含存档内容的字节“向上移动”到文件的开头来完成(想想 C 的记忆移动)。
然而,这种就地移动操作会涉及查找-读取-查找-写入周期,是“成本高昂”的,特别是当您在磁带的上下文中查看它时(tar 最初是为磁带设计的),即带有寻道性能是硬盘无法比拟的。通过这样的移动操作,磁带很快就会磨损。哦,当然,WORM 设备也不支持此移动操作。
-P
开关,则如果当前目录是我们要更新的目录的
parent目录,并且
tar -u...
命令中该目录的路径将正常工作, 不是是绝对路径。例如:我们想要更新目录 /home/blabla/Dir。我们这样做:
tar
cd /home/blabla
tar -u -f tarfile.tar Dir
您每次都可以简单地创建(而不是更新)存档:
cd /home/blabla/Dir
tar -u -f /path/to/tarfile.tar .
这将解决您的存档大小每次翻倍的问题。但当然,它每次都会生成整个档案。
默认情况下,tar 会从成员名称中删除前导
tar -cvpf tarfile.tar *
因此,如果您要归档绝对路径,则需要
/
并使用相对路径,或者添加 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) 文件只能通过附加方式进行修改。警告!当谈到“日期”时,它意味着任何
如果您的文件以任何此类方式被访问(一个简单的 ar
就足够了),那么 tar 就可以做它所做的事情!
你需要找到另一种方式来做你想做的事。可能使用哨兵文件并查看其修改日期是否小于您要附加的文件。