package main import ( "dwelling-upload/pkg/logging" "dwelling-upload/pkg/utils" "flag" "fmt" "io/ioutil" "log" "os" "path" "time" ) var configPath *string = flag.String("conf", "config.yaml", "path to configuration file") var uploadDir *string = flag.String("upload-dir", "/srv/uploads", "path to a directory where uploaded files are stored") var keepFileForHours *int64 = flag.Int64("keep-for", 36, "keep files for this much hours") var showVersion *bool = flag.Bool("v", false, "show version") var version string func main() { flag.Parse() log.SetFlags(log.Llongfile) if *showVersion { fmt.Println("dwelling-upload-clean Ver. ", version, "\nCopyright (c) 2022,2023 Alexander \"Arav\" Andreev ") return } logClean, err := logging.New(path.Join(os.Getenv("LOGS_DIRECTORY"), "clean.log")) if err != nil { log.Fatalln("failed to open clean logger:", err) } defer logClean.Close() uploadsDir, err := ioutil.ReadDir(*uploadDir) if err != nil { log.Fatalf("failed to open directory %s: %s\n", *uploadDir, err) } var deletedCount int64 = 0 var deletedSize int64 = 0 for _, entry := range uploadsDir { if time.Now().UTC().Sub(entry.ModTime().UTC()) >= time.Duration(*keepFileForHours)*time.Hour { if err := os.Remove(path.Join(*uploadDir, entry.Name())); err != nil { log.Printf("failed to remove file %s: %s", entry.Name(), err) } else { deletedSize += entry.Size() deletedCount++ } } } _, _, cFSz := utils.ConvertFileSize(deletedSize) if deletedCount > 0 { logClean.Println(deletedCount, cFSz) } }