func archiveFile(fname string, cfg *conf.Config, rootStat os.FileInfo, fs os.FileInfo) (newname string, err error) { year := strconv.Itoa(fs.ModTime().Year()) month := fs.ModTime().Month().String() archivePath := filepath.Join(cfg.ArchivePath(rootStat.Name()), year, month) err = os.MkdirAll(archivePath, rootStat.Mode()) if err != nil && !os.IsExist(err) { return } zipPath := archivePath + ".zip" if util.FileExists(zipPath) { //unzip so we can archive the new file ... it will be rezipped later if err = util.Unzip(zipPath, archivePath); err != nil { return } } newname = filepath.Join(archivePath, fs.Name()) if _, err = os.Stat(newname); err == nil { err = fmt.Errorf("A file of the same name already exists in the archive") return } err = os.Rename(fname, newname) return }