Compare commits

...

3 commits
v1 ... master

Author SHA1 Message Date
e705b91d8e feat: Add shorthand flag 2025-10-22 19:43:06 +01:00
js0ny
f7792fef66 Use github path for module 2025-03-18 13:20:19 +00:00
js0ny
c05005b334 feat: Add flag to ignore extension 2025-03-18 12:50:22 +00:00
3 changed files with 90 additions and 8 deletions

2
go.mod
View file

@ -1,3 +1,3 @@
module renamedit module github.com/js0ny/renamedit
go 1.24.1 go 1.24.1

44
main.go
View file

@ -2,6 +2,7 @@ package main
import ( import (
"bufio" "bufio"
"flag"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
@ -9,14 +10,27 @@ import (
"strings" "strings"
) )
var ignoreExt bool
func init() {
const ignoreExtDesc = "Ignore file extensions when renaming"
flag.BoolVar(&ignoreExt, "ignore-ext", false, ignoreExtDesc)
flag.BoolVar(&ignoreExt, "i", false, ignoreExtDesc+" (shorthand)")
}
func main() { func main() {
flag.Parse()
// Check command line arguments // Check command line arguments
if len(os.Args) != 2 { args := flag.Args()
fmt.Println("Usage: renamedit <directory path>") if len(args) != 1 {
fmt.Println("Usage: renamedit [options] <directory path>")
fmt.Println("Options:")
flag.PrintDefaults()
os.Exit(1) os.Exit(1)
} }
dirPath := os.Args[1] dirPath := args[0]
// Check if directory exists // Check if directory exists
info, err := os.Stat(dirPath) info, err := os.Stat(dirPath)
@ -46,11 +60,30 @@ func main() {
// Write filenames to temporary file // Write filenames to temporary file
fileNames := make([]string, 0) fileNames := make([]string, 0)
fileExts := make([]string, 0)
for _, file := range files { for _, file := range files {
if !file.IsDir() { if !file.IsDir() {
fileName := file.Name() fileName := file.Name()
fileNames = append(fileNames, fileName) fileNames = append(fileNames, fileName)
// If ignoring extensions, split filename and extension
if ignoreExt {
baseName := fileName
ext := ""
// Get extension only if there is one
if dotIndex := strings.LastIndex(fileName, "."); dotIndex > 0 {
baseName = fileName[:dotIndex]
ext = fileName[dotIndex:]
}
fileExts = append(fileExts, ext)
tmpFile.WriteString(baseName + "\n")
} else {
tmpFile.WriteString(fileName + "\n") tmpFile.WriteString(fileName + "\n")
fileExts = append(fileExts, "") // Empty placeholder
}
} }
} }
tmpFile.Close() tmpFile.Close()
@ -112,7 +145,12 @@ func main() {
// Perform renaming // Perform renaming
for i, oldName := range fileNames { for i, oldName := range fileNames {
// Re-add extension if we were ignoring it
newName := newFileNames[i] newName := newFileNames[i]
if ignoreExt {
newName = newName + fileExts[i]
}
if oldName != newName { if oldName != newName {
oldPath := filepath.Join(dirPath, oldName) oldPath := filepath.Join(dirPath, oldName)
newPath := filepath.Join(dirPath, newName) newPath := filepath.Join(dirPath, newName)

View file

@ -2,12 +2,56 @@
Rename files with your favourite editor Rename files with your favourite editor
## Installation
Build from source:
```bash ```bash
git clone git@github.com:js0ny/renamedit.git git clone https://github.com/js0ny/renamedit.git
cd renamedit cd renamedit
go build go build
``` ```
## Usage
```bash ```bash
renamedit <dir> renamedit [options] <directory>
``` ```
### Options
- `-ignore-ext`: Ignore file extensions when renaming files. This will preserve the original extensions.
### Examples
Basic usage:
```bash
renamedit /path/to/directory
```
Ignore file extensions (useful for batch renaming while preserving extensions):
```bash
renamedit -i /path/to/directory
renamedit --ignore-ext /path/to/directory
```
## How It Works
1. The program opens a temporary file in your preferred text editor
2. Edit the file names as needed
3. Save and exit the editor
4. The program will rename the files according to your edits
## Environment Variables
- `EDITOR`: Set this to your preferred text editor (defaults to vim)
## Supported Editors
The following editors are explicitly supported with wait flags:
- Visual Studio Code (code)
- Sublime Text (subl)
- Zed Editor (zeditor)
- Atom (atom)
- Gedit (gedit)
- And most terminal editors (vim, nano, etc.)