Можно ли извлечь пакет tar.xz в golang? Я понимаю, что можно использовать библиотеку для tar и отправить ее в библиотеку xz go.Можно ли извлечь пакет tar.xz в golang?
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_
также вы можете сделать
import "os/exec"
cmd := exec.Command("tar", "-x", "/your/archive.tar.xz")
err := cmd.Run()
1
Там нет датчика Зива-Зив-Markow или декодер в стандартной библиотеке Go. Если вы позволили предположить, что платформа ваш код работает на предоставляет утилиту 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. Как извлечь файл tar.xz
- 2. Golang - Есть ли пакет bcadd/bcsub?
- 3. Передача переменных в Golang Пакет
- 4. Untar/Unzip * .tar.xz с ANT
- 5. Golang импорт пакет
- 6. Как установить пакет в golang
- 7. Извлечь текстовый контент из HTML в Golang
- 8. Извлечь ZIP-пакет в VB.Net
- 9. Извлечь значение из сети/контекста в Golang
- 10. Можно ли извлечь подмножество jQuery?
- 11. treeview.resources: можно ли их извлечь?
- 12. Можно ли извлечь переменные GET?
- 13. Можно ли использовать R-пакет в искрах?
- 14. Можно ли добавить IIFE в пакет прокрутки?
- 15. Можно ли переупаковать MSI-пакет в UNIX?
- 16. Можно ли программно удалить пакет в Android
- 17. Можно ли удалить пакет в каталоге SSIS?
- 18. Можно ли создать пакет в .net?
- 19. golang: Пользовательский пакет и 'undefined'
- 20. Golang отражает пакет «не тип»
- 21. Странный golang пакет импорта проблема
- 22. Есть ли встроенный пакет для интерпретатора командной строки в golang?
- 23. Могу ли я импортировать сторонний пакет в игровую площадку golang
- 24. Как импортировать собственный пакет golang?
- 25. Извлечь пакет фотографий iOS
- 26. Можно ли добавить номер версии в пакет oracle
- 27. Извлечь данные в шаблон в golang
- 28. Какой пакет содержит функцию слияния в golang
- 29. Извлечь файлы библиотеки gnutls tar.xz и tar.lz для ubuntu 10.04 LTS
- 30. Можно ли принудительно разбить пакет на Java?
Это на самом деле не распаковывать с помощью дегтя. Вероятно, вы хотите tar xvJf archive.tar.xz ... – Fire
@Fire Он работает с GNU tar, поскольку GNU tar автоматически обнаруживает наличие сжатия. Тем не менее, чтобы эта программа была совместима с другими реализациями tar, которые не предоставляют 'J', вы можете настроить канал между' xz -d' и 'tar x'. Кроме того, почему вы предоставляете 'v'? Это не требуется. – fuz
Это правда. 'v' не требуется. – Fire