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
(사실 하이볼에는 더 많은 파일이 있지만 여기에 다 나열하지는 않겠습니다.이것이 완전한 출력입니다.내가 방법을 안다면 원래 구조와 일치하는 최소한으로 재현 가능한 타르볼을 만들 것이므로 내 질문입니다)
차이점에 유의하세요.
- 재아카이브 타르볼은 디렉토리 끝에 슬래시를 추가합니다.
- 정렬 순서가 다릅니다. 새 타르볼은 알파벳순으로 정렬되지만 원본 타르볼은 그렇지 않습니다.
- 새 아카이브에는 디렉터리 계층 구조의 각 수준에 대한 별도의 항목이 있습니다. 대신 원본 아카이브는 무작위로 생략된 것처럼 보입니다.일부디렉토리 항목. 예를 들어, 명시적인 디렉토리 항목
apps/net.daylio/f/.Fabric
이 있지만apps/net.daylio/db
그 안의 파일은 여전히 동일하며 두 아카이브 모두 아카이브 관리자에서 동일하게 나타납니다. 그러나 이는 다시 아카이브된 타르볼을 어떤 이유로든 다른 디렉토리 구조가 아닌 Android 장치로 다시 복원할 수 없기 때문에 문제가 됩니다.
내 개인적인 목표는 다시 아카이브된 타르볼을 내 Android 휴대폰에서 실행하는 것입니다. 이를 위해 나는 가능한 한 원본 타르볼의 구조에 가까운 새 타르볼이 필요하다고 생각했습니다.
- 디렉토리 끝에 슬래시가 없습니다.
apps/net.daylio/f/.Fabric
개별 디렉터리 항목과 해당 하위 디렉터리에만 적용됩니다.
질문: 이 두 가지 표준을 준수하는 방식으로 tar 아카이브를 만드는 방법은 무엇입니까?
--xform "s,/$,,"
1) 줄 끝의 슬래시와 일치할 것이라고 생각하여 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-Exception-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