使用tar同步文件夹而无需重新创建tar文件

6

我正在尝试编写一个脚本,以使tar文件与文件夹保持同步。由于我处理了大量的文件,不想每次运行脚本时都重新制作tar文件。我希望它只添加/删除自上次运行脚本以来已添加/删除的文件到tar文件中。以下是我的代码。

# Create tar if it doesn't exist but don't over write if it does exist
touch -a /home/MyName/data.tar

cd /home/MyName

# Make the tar
tar -uv --exclude='dirToTar/FileIWantToExclude' -f $tarFile dirToTar

这对于添加文件非常有效。但是,如果从dirToTar删除文件,则不会从data.tar中删除该文件。

2
你需要使用 --delete 标志从归档中删除文件。同时,使用 -u 会在归档中存储更新后的文件的第二个副本,这会随着时间的推移占用更多的磁盘空间。 - Etan Reisner
谢谢。除了-u之外,我能做些什么来节省空间吗? - TheCodeMan54
重新创建tarball。创建一个新的tarball。使用其他工具(可以进行原地更新)。 - Etan Reisner
1
对于原地更新,我想.zip文件比tar更好。 - Kjetil S.
你没有压缩tar文件,也似乎不想将其移动到其他地方,那么为什么不使用备份目录,并根据需要添加/删除内容呢?然后可以考虑使用rsync - jhnc
1个回答

1

很遗憾,tar 不支持这个功能。作为替代方案,您可以使用 zip,像这样:

zip -r -FS myArchiveFile.zip dirToZip

不是像你要求的那样使用"tar",但它似乎工作得很好。另一个选择是使用7z(7-zip压缩程序),这可能会给你更好的压缩效果。虽然命令行选项有些晦涩,但以下方法可以实现:

7z u -up1q0r2x2y2z1w2 myArchiveFile.7z dirToZip

我在这里找到了这7z命令行选项的文档:https://www.scottklement.com/p7zip/MANUAL/switches/update.htm。我不知道为什么这个文档这么难找...

如果出于某种原因,您不想使用zip或7z提供的压缩功能,也有办法禁用它们,使zip或7z只创建一种类似tar的文件容器。

最终,我认为您应该每次重新创建归档文件。我怀疑您要求的同步所节省的时间可能很少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接