github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/helpers/file.go (about) 1 package helpers 2 3 import ( 4 "fmt" 5 "io" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "regexp" 10 ) 11 12 func FileExists(path string) bool { 13 _, err := os.Stat(path) 14 if err == nil { 15 return true 16 } 17 if os.IsNotExist(err) { 18 return false 19 } 20 return false 21 } 22 23 func RemoveFile(path string) error { 24 if FileExists(path) { 25 return os.Remove(path) 26 } 27 return nil 28 } 29 30 func CopyFile(src string, dest string) (err error) { 31 srcFile, err := os.Open(src) 32 if err != nil { 33 return 34 } 35 defer srcFile.Close() 36 37 srcStat, err := srcFile.Stat() 38 if err != nil { 39 return 40 } 41 42 if !srcStat.Mode().IsRegular() { 43 return fmt.Errorf("%s is not a regular file.", src) 44 } 45 46 destFile, err := os.Create(dest) 47 if err != nil { 48 return 49 } 50 defer destFile.Close() 51 52 _, err = io.Copy(destFile, srcFile) 53 return 54 } 55 56 func CopyDir(src string, dest string) (err error) { 57 srcStat, err := os.Stat(src) 58 if err != nil { 59 return 60 } 61 62 if !srcStat.Mode().IsDir() { 63 return fmt.Errorf("%s is not a directory.", src) 64 } 65 66 _, err = os.Stat(dest) 67 if !os.IsNotExist(err) { 68 return fmt.Errorf("Destination %s already exists.", dest) 69 } 70 71 entries, err := ioutil.ReadDir(src) 72 if err != nil { 73 return 74 } 75 76 err = os.MkdirAll(dest, srcStat.Mode()) 77 if err != nil { 78 return 79 } 80 81 for _, entry := range entries { 82 srcPath := filepath.Join(src, entry.Name()) 83 destPath := filepath.Join(dest, entry.Name()) 84 85 if entry.Mode().IsDir() { 86 err = CopyDir(srcPath, destPath) 87 } else { 88 err = CopyFile(srcPath, destPath) 89 } 90 if err != nil { 91 return 92 } 93 } 94 95 return 96 } 97 98 //RemoveFilesWithPattern ... 99 func RemoveFilesWithPattern(targetDir, pattern string) error { 100 r, err := regexp.Compile(pattern) 101 if err != nil { 102 return err 103 } 104 files, err := ioutil.ReadDir(targetDir) 105 if err != nil { 106 return err 107 } 108 for _, f := range files { 109 if r.MatchString(f.Name()) { 110 err := os.RemoveAll(filepath.Join(targetDir, f.Name())) 111 if err != nil { 112 return err 113 } 114 } 115 } 116 return nil 117 }