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

그러나 다시 패키징된 타르볼은 파일을 다르게 나타냅니다:

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

(사실 하이볼에는 더 많은 파일이 있지만 여기에 다 나열하지는 않겠습니다.이것이 완전한 출력입니다.내가 방법을 안다면 원래 구조와 일치하는 최소한으로 재현 가능한 타르볼을 만들 것이므로 내 질문입니다)

차이점에 유의하세요.

  1. 재아카이브 타르볼은 디렉토리 끝에 슬래시를 추가합니다.
  2. 정렬 순서가 다릅니다. 새 타르볼은 알파벳순으로 정렬되지만 원본 타르볼은 그렇지 않습니다.
  3. 새 아카이브에는 디렉터리 계층 구조의 각 수준에 대한 별도의 항목이 있습니다. 대신 원본 아카이브는 무작위로 생략된 것처럼 보입니다.일부디렉토리 항목. 예를 들어, 명시적인 디렉토리 항목 apps/net.daylio/f/.Fabric이 있지만apps/net.daylio/db

그 안의 파일은 여전히 ​​동일하며 두 아카이브 모두 아카이브 관리자에서 동일하게 나타납니다. 그러나 이는 다시 아카이브된 타르볼을 어떤 이유로든 다른 디렉토리 구조가 아닌 Android 장치로 다시 복원할 수 없기 때문에 문제가 됩니다.

내 개인적인 목표는 다시 아카이브된 타르볼을 내 Android 휴대폰에서 실행하는 것입니다. 이를 위해 나는 가능한 한 원본 타르볼의 구조에 가까운 새 타르볼이 필요하다고 생각했습니다.

  1. 디렉토리 끝에 슬래시가 없습니다.
  2. apps/net.daylio/f/.Fabric개별 디렉터리 항목과 해당 하위 디렉터리에만 적용됩니다.

질문: 이 두 가지 표준을 준수하는 방식으로 tar 아카이브를 만드는 방법은 무엇입니까?

--xform "s,/$,,"1) 줄 끝의 슬래시와 일치할 것이라고 생각하여 tar에 매개변수를 추가하고 제거하려고 시도했지만 xform 매개변수는 아무것도 변경하지 않습니다. 2)를 달성하기 위해 각 개별 디렉토리 항목 삭제를 사용해 보았지만 --exclude "*/"이 역시 아무 것도 수행되지 않았습니다.


제가 조사하는 동안 방문한 웹사이트는 다음과 같습니다.

관련 정보