그래서 여러 디렉토리와 파일에서 tar.gz 파일 파일을 채취하려고합니다.파일과 디렉토리에서 tar.gz 파일을 만들 때`쓰기가 너무 오래 걸림`오류가 발생했습니다.
tar -cvzf sometarfile.tar.gz somedir/ someotherdir/ somefile.json somefile.xml
디렉토리 안에 다른 디렉토리가 있다고 가정합니다.
paths := []string{
"somedir/",
"someotherdir/",
"somefile.json",
"somefile.xml",
}
이러한 사용 : 내가 입력으로 이것을 가지고
func TarFilesDirs(paths []string, tarFilePath string) error {
// set up the output file
file, err := os.Create(tarFilePath)
if err != nil {
return err
}
defer file.Close()
// set up the gzip writer
gz := gzip.NewWriter(file)
defer gz.Close()
tw := tar.NewWriter(gz)
defer tw.Close()
// add each file/dir as needed into the current tar archive
for _,i := range paths {
if err := tarit(i, tw); err != nil {
return err
}
}
return nil
}
func tarit(source string, tw *tar.Writer) error {
info, err := os.Stat(source)
if err != nil {
return nil
}
var baseDir string
if info.IsDir() {
baseDir = filepath.Base(source)
}
return filepath.Walk(source,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}
if err := tw.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
return nil
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(tw, file)
if err != nil {
log.Println("failing here")
return err
}
return err
})
}
문제 :
archive/tar: write too long
오류를 때 디렉토리 내가지고있어 큰 경우 나는 모든 것을 제거한다.
은 ...어떤 아이디어를 아이디어 뛰쳐 해결책을 찾기 위해 노력하고 이것에 많은 시간을 낭비?
감사
예 대답은 –
입니다. 파일이 디스크에서 변경되어 더 길어질 수도 있습니다. –