Mult
A Go CLI that bundles everyday file operations — rename, convert, analyze, archive, and cleanup — behind one registry instead of a folder of shell scripts.
Problem
Developer workflows accumulate one-off scripts: slugify a batch of filenames, strip duplicates, resize images, audit permissions. Each script has its own flags, error shape, and dry-run behavior. Consistency disappears; muscle memory replaces design.
Mult registers discrete operations behind a shared core contract so new capabilities plug in without rewriting the CLI shell.
Operation families
- Rename transforms — slugify, regex replace, sequential numbering, CSV-driven batches, and metadata-aware renames
- Media and document ops for image, video, audio, and document pipelines
- Analysis and security passes over filesystem trees
- Archive and cleanup helpers for bulk maintenance
- Plugin-style registration via
core.DefaultRegistrywith category and audience metadata
type slugifyOp struct{}
func (o slugifyOp) Name() string { return "slugify" }
func (o slugifyOp) Description() string { return "convert filenames to URL-safe slugs" }
func (o slugifyOp) Category() core.Category { return core.CategoryRename }
func (o slugifyOp) Execute(_ context.Context, entry core.FileEntry, _ core.Options) (core.Result, error) {
stem, extension := splitStemExtension(entry.Name)
newStem := filename.Slug(stem)
return renameResult(entry, newStem+extension, "already slugified"), nil
}
func init() { core.DefaultRegistry.Register(slugifyOp{}) }