我遇到这种特殊情况,解压并重新打包 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,因此我问这个问题)
注意差异:
- 重新归档的 tarball 将斜杠附加到目录末尾
- 排序顺序不同。新的 tarball 按字母顺序排序,而原始 tarball 则不然。
- 新存档对于目录层次结构的每个级别都有一个单独的条目。相反,原始档案看似随机地省略了一些的目录条目。例如,它有一个明确的目录条目
apps/net.daylio/f/.Fabric
,但没有apps/net.daylio/db
其中的文件仍然相同,并且两个存档在存档管理器中显示相同。然而,这是一个问题,因为重新存档的 tarball 无法恢复回 Android 设备,无论出于何种原因,它都无法使用不同的目录结构。
我个人的目标是让重新存档的 tarball 在我的 Android 手机上运行。为此,我认为我需要新的 tarball 尽可能接近原始 tarball 的结构;
- 目录末尾没有斜杠
apps/net.daylio/f/.Fabric
仅适用于及其子目录的单独目录条目
问题:如何以尊重这两个标准的方式创建 tar 存档?
对于 1) 我尝试--xform "s,/$,,"
向 tar 添加参数,认为它会匹配行末尾的斜杠并将其删除,但是, xform 参数不会改变任何内容。为了达到 2),我还尝试使用 删除每个单独的目录条目--exclude "*/"
,尽管这也没有做任何事情。
我在自己的研究过程中浏览过的网站:
- Git:排除文件夹但包含子文件夹
- https://unix.stackexchange.com/questions/ask
- https://askubuntu.com/questions/811081/how-do-i-use-tar-to-exclude-all-files-of-a-certain-directory
- https://serverfault.com/questions/320729/how-to-exclude-files-from-tar-archive-using-regular-expressions
- https://stackoverflow.com/questions/984204/shell-command-to-tar-directory- except-certain-files-folders
- 从 tar 存档中删除文件
- tar --exclude 不排除。为什么?
- tar“--exclude-from”双星通配符
- https://stackoverflow.com/questions/7503675/tar-exclude-file-pattern
- https://superuser.com/questions/272213/tar-files-without-directory-struct