如何正确地重新归档 Android 备份 tarball

如何正确地重新归档 Android 备份 tarball

我遇到这种特殊情况,解压并重新打包 Android 备份 tarball 会更改其中的条目,导致备份文件无法使用。

为了让读者更简单,以下是 tarball 中的文件

apps
└── net.daylio
    ├── db
    │   └── entries.db
    ├── f
    │   └── .Fabric
    │       └── io.fabric.sdk.android:fabric
    │           └── com.crashlytics.settings.json
    └── sp
        └── net.daylio_preferences.xml

现在,tar -t在原始档案上会产生类似这样的东西。

apps/net.daylio/f/.Fabric
apps/net.daylio/f/.Fabric/io.fabric.sdk.android:fabric
apps/net.daylio/f/.Fabric/io.fabric.sdk.android:fabric/com.crashlytics.settings.json
apps/net.daylio/db/entries.db
apps/net.daylio/sp/net.daylio_preferences.xml

但是,重新打包的 tarball 以不同的方式表示文件:

apps/
apps/net.daylio/
apps/net.daylio/db/
apps/net.daylio/db/entries.db
apps/net.daylio/f/
apps/net.daylio/f/.Fabric/
apps/net.daylio/f/.Fabric/io.fabric.sdk.android:fabric/
apps/net.daylio/f/.Fabric/io.fabric.sdk.android:fabric/com.crashlytics.settings.json
apps/net.daylio/sp/
apps/net.daylio/sp/net.daylio_preferences.xml

(实际上,高球中还有更多文件,但我不会在这里列出所有文件。这是完整的输出。如果我知道如何的话,我会制作一个与原始结构匹配的最小可复制 tarball,因此我问这个问题)

注意差异:

  1. 重新归档的 tarball 将斜杠附加到目录末尾
  2. 排序顺序不同。新的 tarball 按字母顺序排序,而原始 tarball 则不然。
  3. 新存档对于目录层次结构的每个级别都有一个单独的条目。相反,原始档案看似随机地省略了一些的目录条目。例如,它有一个明确的目录条目apps/net.daylio/f/.Fabric,但没有apps/net.daylio/db

其中的文件仍然相同,并且两个存档在存档管理器中显示相同。然而,这是一个问题,因为重新存档的 tarball 无法恢复回 Android 设备,无论出于何种原因,它都无法使用不同的目录结构。

我个人的目标是让重新存档的 tarball 在我的 Android 手机上运行。为此,我认为我需要新的 tarball 尽可能接近原始 tarball 的结构;

  1. 目录末尾没有斜杠
  2. apps/net.daylio/f/.Fabric仅适用于及其子目录的单独目录条目

问题:如何以尊重这两个标准的方式创建 tar 存档?

对于 1) 我尝试--xform "s,/$,,"向 tar 添加参数,认为它会匹配行末尾的斜杠并将其删除,但是, xform 参数不会改变任何内容。为了达到 2),我还尝试使用 删除每个单独的目录条目--exclude "*/",尽管这也没有做任何事情。


我在自己的研究过程中浏览过的网站:

相关内容