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

The*_*n54 5 bash tar sh

我正在尝试编写一个脚本,使 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
Run Code Online (Sandbox Code Playgroud)

这非常适合添加文件。但是,如果文件从 中删除dirToTar,则不会从 中删除data.tar

Eri*_*kus 1

不幸的是,tar 不支持这一点。作为替代方案,您可以使用 zip,如下所示:

zip -r -FS myArchiveFile.zip dirToZip
Run Code Online (Sandbox Code Playgroud)

不是你要求的“tar”,但它似乎工作得很好。另一种选择是使用 7z(7-zip 存档器),它可以为您提供更好的压缩效果。其命令行选项很晦涩,但这是有效的:

7z u -up1q0r2x2y2z1w2 myArchiveFile.7z dirToZip
Run Code Online (Sandbox Code Playgroud)

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

如果出于某种原因,您不希望 zip 或 7z 提供的压缩,也有一些方法可以禁用它,因此 zip 或 7z 只需创建一个文件容器,就像 tar 一样。

但最后,我认为你应该每次都重新创建存档。我怀疑执行您要求的同步所节省的时间可能很小。