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  }