golang에서 tar.xz 패키지를 추출 할 수 있습니까? 제 이해는 tar에 라이브러리를 사용하고 xz go 라이브러리로 보낼 수 있습니다.golang에서 tar.xz 패키지를 추출 할 수 있습니까?
3
A
답변
2
나는 최근 XZ decompression package 그래서 tar.xz를 추출 지금 수 있습니다 생성 Go 코드 만 사용하십시오.
다음 코드는 현재 디렉토리에 파일 myfile.tar.xz
를 추출 :
package main
import (
"archive/tar"
"fmt"
"io"
"log"
"os"
"xi2.org/x/xz"
)
func main() {
// Open a file
f, err := os.Open("myfile.tar.xz")
if err != nil {
log.Fatal(err)
}
// Create an xz Reader
r, err := xz.NewReader(f, 0)
if err != nil {
log.Fatal(err)
}
// Create a tar Reader
tr := tar.NewReader(r)
// Iterate through the files in the archive.
for {
hdr, err := tr.Next()
if err == io.EOF {
// end of tar archive
break
}
if err != nil {
log.Fatal(err)
}
switch hdr.Typeflag {
case tar.TypeDir:
// create a directory
fmt.Println("creating: " + hdr.Name)
err = os.MkdirAll(hdr.Name, 0777)
if err != nil {
log.Fatal(err)
}
case tar.TypeReg, tar.TypeRegA:
// write a file
fmt.Println("extracting: " + hdr.Name)
w, err := os.Create(hdr.Name)
if err != nil {
log.Fatal(err)
}
_, err = io.Copy(w, tr)
if err != nil {
log.Fatal(err)
}
w.Close()
}
}
f.Close()
}
3
http://golang.org/pkg/archive/tar/#example_
또한 당신은 이동 표준 라이브러리에는 렘펠 - 지브 - Markow 인코더 또는 디코더가 없습니다
import "os/exec"
cmd := exec.Command("tar", "-x", "/your/archive.tar.xz")
err := cmd.Run()
1
할 수 있습니다. 당신은 당신의 코드가 xz
유틸리티를 제공합니다에서 실행되는 플랫폼, 당신은 이런 스텁 기능을 사용할 수 있다고 가정 할 수있는 경우 :
import "os/exec"
// decompress xz compressed data stream r.
func UnxzReader(r io.Reader) (io.ReadCloser, error) {
unxz := exec.Command("xz", "-d")
unxz.Stdin = r
out, err := unxz.StdoutPipe()
if err != nil {
return nil, err
}
err = unxz.Start()
if err != nil {
return nil, err
}
// we are not interested in the exit status, but we should really collect
// that zombie process
go unxz.Wait()
return out, nil
}
관련 문제
- 1. Golang에서 문자열의 일부를 추출 하시겠습니까?
- 2. 프로젝트에서 설치된 너겟 패키지를 추출 할 수 있습니까
- 3. 자작 나무가 포크 버전의 패키지를 "추출"할 수 있습니까?
- 4. Golang에서 다중 도메인을 처리 할 수 있습니까?
- 5. golang에서 cloudsql에 연결할 수 있습니까?
- 6. golang에서 zlib을 사용하여 어떻게 zlib과 협조 할 수 있습니까?
- 7. golang에서 문자열에 따라 differenct 유형을 인스턴스화 할 수 있습니까?
- 8. fMt.Print()가 GoLang에서 stdout에 쓸 수 있습니까?
- 9. SQL 2005 패키지를 예약 할 수 있습니까?
- 10. Linux에서 Chocolatey 패키지를 빌드 할 수 있습니까?
- 11. 패키지를 프로젝트간에 공유 할 수 있습니까?
- 12. 패키지를 import 문에서 참조 할 수 있습니까?
- 13. org.apache.java.lang 패키지를 어디에서 다운로드 할 수 있습니까?
- 14. 어떻게 Heroku에서 패키지를 업그레이드 할 수 있습니까?
- 15. setuptools에서 선택적 패키지를 정의 할 수 있습니까?
- 16. 어디에서 QtMobility 패키지를 다운로드 할 수 있습니까?
- 17. pdfbox는 벡터 이미지를 추출 할 수 있습니까?
- 18. 데이터에서 포인트를 쉽게 추출 할 수 있습니까?
- 19. 임베디드 이미지를 파일로 추출 할 수 있습니까?
- 20. 함수 호출을 정규식으로 추출 할 수 있습니까
- 21. PHP에서 사이트의 데이터를 추출 할 수 있습니까?
- 22. 어떻게 카메라의 일부를 추출 할 수 있습니까?
- 23. flexslider에서 애니메이션을 무작위로 추출 할 수 있습니까?
- 24. $ _POST에서 변수의 이름을 추출 할 수 있습니까?
- 25. 실행 코드에서 암호를 추출 할 수 있습니까?
- 26. oauth 시그니처에서 consumer_secret을 추출 할 수 있습니까?
- 27. jQuery의 하위 집합을 추출 할 수 있습니까?
- 28. 도커 컨테이너에서 Dockerfile을 추출 할 수 있습니까?
- 29. OrderBy에서 재배치 맵을 추출 할 수 있습니까?
- 30. 다른 도메인에서 데이터를 추출 할 수 있습니까?
이 실제로 타르를 통해 압축되지 않습니다. 당신은 아마도 tar xvJf archive.tar.xz를 원할 것입니다. – Fire
@Fire GNU tar는 압축의 존재를 자동으로 감지하기 때문에 GNU tar를 사용합니다. 이 프로그램이'J'를 제공하지 않는 다른 tar 구현과 호환되도록하려면'xz -d'와'tar x' 사이에 파이프를 설정해야 할 수도 있습니다. 또한, 왜'v'를 제공합니까? 필수는 아닙니다. – fuz
사실입니다. 'v'는 필요하지 않습니다. – Fire