From 76d9e148528adc42eefac4244ddb21bb3784b0c3 Mon Sep 17 00:00:00 2001 From: kuiki Date: Wed, 13 Mar 2019 16:10:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0modtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modtime/modtime.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 modtime/modtime.go diff --git a/modtime/modtime.go b/modtime/modtime.go new file mode 100644 index 0000000..74a646e --- /dev/null +++ b/modtime/modtime.go @@ -0,0 +1,86 @@ +package main + +import ( + "fmt" + "log" + "os" + "path" + "strings" + "time" +) + +var ( + timeLocation *time.Location +) + +func init() { + // 初始化时区 + var err error + timeLocation, err = time.LoadLocation("Local") + if err != nil { + log.Fatalf("LoadLocation fail: %v", err) + } +} + +func main() { + fmt.Println("start processing") + pwd, err := os.Open(".") + if err != nil { + log.Fatalf("os.Open . error: %v", err) + } + defer pwd.Close() + pwdInfo, err := pwd.Stat() + if err != nil { + log.Fatalf("pwd.Stat error: %v", err) + } + processDir(pwdInfo, pwd, []string{}) +} + +func processDir(pwdInfo os.FileInfo, pwd *os.File, paths []string) { + fmt.Println("processing dir ", pwdInfo.Name()) + if !pwdInfo.IsDir() { + log.Fatalf("input file %s is not a Dir", pwdInfo.Name()) + } + if pwd == nil { + var err error + path := strings.Join(paths, "/") + pwd, err = os.Open(path + "/" + pwdInfo.Name()) + if err != nil { + log.Fatalf("os.Open %v %s error: %v", paths, pwdInfo.Name(), err) + } + defer pwd.Close() + } + fileInfos, err := pwd.Readdir(0) + if err != nil { + log.Fatalf("pwd %s Readdir error: %v", pwd.Name(), err) + } + for _, fileInfo := range fileInfos { + if fileInfo.IsDir() { + processDir(fileInfo, nil, append(paths, pwdInfo.Name())) + } else { + ext := path.Ext(fileInfo.Name()) + switch ext { + case ".mp4": + processMP4(fileInfo, append(paths, pwdInfo.Name())) + } + } + } +} + +func processMP4(fileInfo os.FileInfo, paths []string) { + filename := fileInfo.Name() + path := strings.Join(paths, "/") + if path != "." { + filename = path + "/" + filename + } + t, err := time.ParseInLocation("20060102150405", strings.Split(fileInfo.Name(), "-")[1][:14], timeLocation) + if err != nil { + log.Println("Parse time fail from filename ", fileInfo.Name()) + return + } + fmt.Println("processing file ", filename, t.Format(time.RFC3339)) + err = os.Chtimes(filename, t, t) + if err != nil { + log.Printf("Chtimes file %s fail: %v\n", filename, err) + } +}