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

标签 bash sh tar

<分区>

我正在尝试编写一个使 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 中删除。

最佳答案

不幸的是,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 的文件容器即可。

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

关于bash - 使用 tar 同步文件夹而不重新创建 tar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216817/

相关文章:

java - 通过 osascript 将您的 java 应用程序提升为 MAC OSX 上的管理员权限

bash - 字符串检测时退出尾部

linux - -zxvf 在 tar -zxvf <文件名> 中是什么意思?

javascript - 将 Sed 函数转变为 JavaScript 正则表达式

linux - 如何创建一个 bash 函数来创建多个命名目录,然后按扩展名组织它们包含的文件?

bash - bash 中的动态对话框——菜单框

unix - 如何将 tar.gz 解压到另一个目录中

linux - 使用 GetOpts 和强制参数验证命令行参数

linux - 使用 awk 检查来自不同行的变量

linux - 如何提取 filename.tar.gz 文件