diff --git a/replacer/main.go b/replacer/main.go index 5a96893..f3cb41c 100644 --- a/replacer/main.go +++ b/replacer/main.go @@ -11,11 +11,21 @@ import ( "time" ) -func copy(src, dst string) error { +func copy(src, dst string, stdlog *log.Logger) error { fi, err := os.Stat(src) if err != nil { return err } + if fi.IsDir() { + entries, _ := os.ReadDir(src) + for _, ent := range entries { + if err := copy(path.Join(src, ent.Name()), path.Join(dst, ent.Name()), stdlog); err != nil { + return err + } + } + return nil + } + inmode := fi.Mode() in, err := os.Open(src) @@ -45,6 +55,7 @@ func copy(src, dst string) error { return err } + stdlog.Println("file copied :", src, dst) return nil } @@ -70,38 +81,21 @@ func main() { stdlog.Println("target is terminated") - selfext, _ := os.Executable() - selfext = path.Base(selfext) - nextArgs := args[4:] - entries, _ := os.ReadDir(args[2]) - for _, ent := range entries { - if ent.Name() == selfext { - continue - } + // replacer 제거. 내가 돌고 있으므로 복사는 안된다. + // 내가 실행되기 전에 이미 복사가 되서 나는 최신 버전임 + os.Remove(path.Join(args[2], os.Args[0])) + if err := copy(args[2], "", stdlog); err != nil { + stdlog.Fatal(err) + } - if ent.IsDir() { - if err := os.MkdirAll(ent.Name(), 0775); err != nil { - stdlog.Fatal(err) - } - } else { - if ent.Name() == "@args" { - var tempArgs []string - argfile, _ := os.Open(path.Join(args[2], ent.Name())) - dec := json.NewDecoder(argfile) - if dec.Decode(&tempArgs) == nil { - nextArgs = tempArgs - } - } else { - err := copy(path.Join(args[2], ent.Name()), ent.Name()) - if err != nil { - stdlog.Println("copy failed :", path.Join(args[2], ent.Name()), ent.Name()) - stdlog.Fatal(err) - } else { - stdlog.Println("file copied :", path.Join(args[2], ent.Name()), ent.Name()) - } - } + nextArgs := args[4:] + if bt, _ := os.ReadFile("@args"); len(bt) > 0 { + var tempArgs []string + if json.Unmarshal(bt, &tempArgs) == nil { + nextArgs = tempArgs } } + os.Remove("@args") err := os.RemoveAll(args[2]) if err != nil {