package main import ( "flag" "io" "log" "os" "path" "strings" "time" ) const ( Black = "\033[30m" Red = "\033[31m" Green = "\033[32m" Yellow = "\033[33m" Blue = "\033[34m" Magenta = "\033[35m" Cyan = "\033[36m" White = "\033[37m" Reset = "\033[0m" PathColor = Magenta ErrorColor = Red ) func init() { log.SetFlags(log.Lmicroseconds | log.Lshortfile) logFile, err := os.Create("main.log") if err != nil { log.Printf("Error creating log file: %v", err) os.Exit(1) } logger := io.MultiWriter(os.Stdout, logFile) log.SetOutput(logger) } func main() { wd := flag.String("wd", "", "working directory") scanTimer := flag.Int("scan", 60, "scan interval in seconds") flag.Parse() workdir := path.Clean(*wd) forbidden := flag.Args() envForbidden, ok := os.LookupEnv("FORBIDDEN") if ok { forbidden = append(forbidden, strings.Split(envForbidden, ",")...) } pathPrefix, ok := os.LookupEnv("PATH_PREFIX") if ok { workdir = path.Join(workdir, pathPrefix) } log.Printf("Working directory: %s%s%s", PathColor, workdir, Reset) log.Printf("Forbidden files: %v", forbidden) ticker := time.NewTicker(time.Duration(*scanTimer) * time.Second) for { log.Printf("Running at %s", time.Now().Format(time.RFC3339)) for _, f := range forbidden { log.Printf("Checking file %s%s%s", PathColor, f, Reset) f = strings.Trim(f, " ") fullPath := path.Join(workdir, f) fullPath = path.Clean(fullPath) _, err := os.Stat(fullPath) if err != nil { log.Printf("Error stating file %s%s%s: %s%v%s", PathColor, fullPath, Reset, ErrorColor, err, Reset) continue } log.Printf("Removing file %s%s%s", PathColor, fullPath, Reset) err = os.RemoveAll(fullPath) if err != nil { log.Printf("Error removing file %s%s%s: %s%v%s", PathColor, fullPath, Reset, ErrorColor, err, Reset) continue } } <-ticker.C } }