it-swarm.dev

기존 tar.gz 아카이브에 파일을 추가 / 업데이트 하시겠습니까?

Tar.gz 아카이브에 파일을 추가/업데이트하는 방법이 있습니까? 기본적으로 /data/data/com.myapp.backup/./files/settings.txt에 파일이 포함 된 아카이브가 있으며 해당 파일을 아카이브에서 가져오고 (이미 완료) 편집이 완료되면 다시 아카이브로 푸시하고 싶습니다. 어떻게하면 되나요? 경로의 . 때문에 문제가 있습니까?

78
Naftuli Kay

Tar 파일 형식은 몇 개의 헤더와 함께 연결된 일련의 파일입니다. 그것을 찢고 내용물을 넣은 다음 다시 정리하는 것은 매우 복잡한 일이 아닙니다. Jander description 프로그램으로서 tar가 이것을 수행하는 유틸리티 기능을 가지고 있지 않고 압축과 관련하여 추가적인 합병증이있는 이유는 변경 전후에 있습니다.

그러나 작업을위한 도구가 있습니다! 압축 된 tar 아카이브의 루프백 마운트를 폴더에 수행 한 다음 파일 시스템을 변경할 수있는 시스템이 두 개 이상 있습니다. 완료되면 폴더를 마운트 해제하면 압축 된 아카이브를 롤링 할 수 있습니다.

첫 번째 옵션은 Fusearchivemount 프로젝트입니다. 다음은 자습서 입니다. 시스템에 이미 퓨즈가있을 수 있으며 배포되지 않은 경우 배포 할 수있는 옵션이 있어야합니다.

다른 옵션은 tarfs 입니다. 사용하기 간단 함 이지만 bzip2 아카이브를 손상시키는 데 문제가 있다고 들었습니다.

18
Caleb

보관 파일에서 파일을 가져 오려면 tar xzf archive.tar.gz my/path/to/file.txt. 파일 경로의 디렉토리도 작성됩니다. 사용하다 tar t (예 : tar tzf archive.tar.gz)를 사용하여 아카이브의 파일을 나열하십시오.

tar는 "in-place"파일 업데이트를 지원하지 않습니다. 그러나 파일이 이미 아카이브에있는 파일과 동일한 경로를 가지고 있더라도 파일을 아카이브 끝에 추가 할 수 있습니다. 이 경우 파일의 두 사본이 모두 아카이브에 있으며 나중에 추가 된 파일이 이전 파일을 대체합니다. 이를 위해 사용할 명령은 tar r (또는 tar u 아카이브보다 새로운 파일 만 추가하는 것은 사용하는 명령입니다. . 경로에 문제가 없어야합니다.

그러나 압축 된 아카이브에는 추가 할 수 없습니다. 따라서 다음을 수행해야합니다.

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

전체 아카이브를 두 번 이상 다시 쓰는 것을 의미하기 때문에 아마도 듣고 싶지 않을 것입니다. 매우 큰 아카이브가 아닌 경우 전체 내용을 푼 다음 편집 한 후 다시 타르 팅하는 것이 좋습니다. 또는 압축되지 않은 아카이브를 사용할 수 있습니다.

48
Jander

Tar은 원래 테이프에 사용되도록 설계되었으므로 "바꾸기"파일은 실제로 설계에 포함되지 않습니다. 그러나 --delete를 사용하여 원래 tar에서 파일을 삭제 한 다음 -u를 사용하여 tar를 업데이트하고 파일을 다시 추가 할 수 있습니다. tar가 아카이브를 내부적으로 재구성해야하기 때문에 시간이 조금 걸릴 수 있습니다.

9
rleibman