package main import ( "fmt" "io" "os" "path/filepath" "strings" ) var ( KEEP_SRT bool = false ) func scan_dir(dir string) ([]string, error) { var r []string = []string{} ls, err := os.ReadDir(dir) if err != nil { return nil, err } for _, elem := range ls { if elem.IsDir() { rs, err := scan_dir(filepath.Join(dir, elem.Name())) if err != nil { return nil, err } for _, e := range rs { r = append(r, filepath.Join(elem.Name(), e)) } } else { if strings.HasSuffix(elem.Name(), ".srt") { if !KEEP_SRT { continue } r = append(r, elem.Name()) continue } if strings.HasSuffix(elem.Name(), ".info") { continue } r = append(r, elem.Name()) } } return r, nil } func main() { // Keeps if len(os.Args) != 1 { for idx, arg := range os.Args { if idx == 0 { // Skip program name continue } switch strings.ToLower(arg) { case "srt": KEEP_SRT = true } } if KEEP_SRT { fmt.Println("Keeping .srt's") } } actions, err := scan_dir(".") if err != nil { fmt.Println("Err:", err) return } fmt.Println("Found:", len(actions)) for _, a := range actions { fmt.Println(a) out, err := os.Create(filepath.Base(a)) if err != nil { fmt.Println("Err (Create out):", err) continue } in, err := os.Open(a) if err != nil { out.Close() err1 := os.Remove(filepath.Base(a)) if err1 != nil { fmt.Println("Err (Cleanup):", err1) } fmt.Println("Err (Open in):", err) continue } _, err = io.Copy(out, in) if err != nil { in.Close() out.Close() err1 := os.Remove(filepath.Base(a)) if err1 != nil { fmt.Println("Err (Cleanup):", err1) } fmt.Println("Err (Copy in -> out):", err) continue } err = os.RemoveAll(filepath.Dir(a)) if err != nil { fmt.Println("Err (Remove):", err) } } }