From ee772c4ceca473dc34c9b65c459dd6972415f50a Mon Sep 17 00:00:00 2001 From: Stefin Date: Thu, 7 Jul 2022 00:05:56 +0530 Subject: [PATCH] Added UnzipDirectory function --- src/utils/utils.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/utils/utils.go b/src/utils/utils.go index 347acec..29bc6c8 100644 --- a/src/utils/utils.go +++ b/src/utils/utils.go @@ -412,3 +412,45 @@ func ZipDirectory(destination string, source string) (err error) { fmt.Println() return nil } + +func UnzipDirectory(destination string, source string) error { + + archive, err := zip.OpenReader(source) + if err != nil { + log.Fatalln(err) + } + defer archive.Close() + + for _, f := range archive.File { + filePath := filepath.Join(destination, f.Name) + fmt.Fprintf(os.Stderr, "\r\033[2K") + fmt.Fprintf(os.Stderr, "\rUnzipping file %s", filePath) + if f.FileInfo().IsDir() { + os.MkdirAll(filePath, os.ModePerm) + continue + } + + if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil { + log.Fatalln(err) + } + + dstFile, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + log.Fatalln(err) + } + + fileInArchive, err := f.Open() + if err != nil { + log.Fatalln(err) + } + + if _, err := io.Copy(dstFile, fileInArchive); err != nil { + log.Fatalln(err) + } + + dstFile.Close() + fileInArchive.Close() + } + fmt.Println() + return nil +}