Files
goutils/cmd/cleankbf/main.go
2025-04-10 01:16:01 -07:00

66 lines
1.2 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"regexp"
"git.wntrmute.dev/kyle/goutils/die"
)
var reUUID = regexp.MustCompile(`^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}_(.+)$`)
func renamePath(path string, dryRun bool) error {
dir, base := filepath.Split(path)
base = reUUID.ReplaceAllString(base, "$1")
newPath := filepath.Join(dir, base)
if dryRun {
fmt.Println(path, "->", newPath)
return nil
}
err := os.Rename(path, newPath)
if err != nil {
return fmt.Errorf("renaming %s to %s failed: %v", path, newPath, err)
}
return nil
}
func test() bool {
const testFilePath = "48793683-8568-47c2-9e2d-eecab3c4b639_Whispers of Chernobog.pdf"
const expected = "Whispers of Chernobog.pdf"
actual := reUUID.ReplaceAllString(testFilePath, "$1")
return actual == expected
}
func main() {
var err error
if !test() {
die.With("test failed")
}
dryRun := false
flag.BoolVar(&dryRun, "n", dryRun, "don't rename files, just print what would be done")
flag.Parse()
paths := flag.Args()
if len(paths) == 0 {
paths, err = filepath.Glob("*")
die.If(err)
}
for _, file := range paths {
err = renamePath(file, dryRun)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", file, err)
}
}
}