initial commit
This commit is contained in:
commit
1d88fe68ee
3 changed files with 117 additions and 0 deletions
113
main.go
Normal file
113
main.go
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Check command line arguments
|
||||
if len(os.Args) != 2 {
|
||||
fmt.Println("Usage: renamedit <directory path>")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
dirPath := os.Args[1]
|
||||
|
||||
// Check if directory exists
|
||||
info, err := os.Stat(dirPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if !info.IsDir() {
|
||||
fmt.Printf("Error: %s is not a directory\n", dirPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Get list of files in the directory
|
||||
files, err := os.ReadDir(dirPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading directory: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Create temporary file
|
||||
tmpFile, err := os.CreateTemp("", "rename-*.txt")
|
||||
if err != nil {
|
||||
fmt.Printf("Error creating temporary file: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer os.Remove(tmpFile.Name())
|
||||
|
||||
// Write filenames to temporary file
|
||||
fileNames := make([]string, 0)
|
||||
for _, file := range files {
|
||||
if !file.IsDir() {
|
||||
fileName := file.Name()
|
||||
fileNames = append(fileNames, fileName)
|
||||
tmpFile.WriteString(fileName + "\n")
|
||||
}
|
||||
}
|
||||
tmpFile.Close()
|
||||
|
||||
// Open temporary file with editor
|
||||
editor := os.Getenv("EDITOR")
|
||||
if editor == "" {
|
||||
editor = "vim" // Default editor
|
||||
}
|
||||
|
||||
cmd := exec.Command(editor, tmpFile.Name())
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
fmt.Printf("Editor error: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Read edited file
|
||||
content, err := os.ReadFile(tmpFile.Name())
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading temporary file: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Parse new filenames
|
||||
scanner := bufio.NewScanner(strings.NewReader(string(content)))
|
||||
var newFileNames []string
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if line != "" {
|
||||
newFileNames = append(newFileNames, line)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the number of files matches
|
||||
if len(newFileNames) != len(fileNames) {
|
||||
fmt.Println("Error: Number of new and old filenames doesn't match")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Perform renaming
|
||||
for i, oldName := range fileNames {
|
||||
newName := newFileNames[i]
|
||||
if oldName != newName {
|
||||
oldPath := filepath.Join(dirPath, oldName)
|
||||
newPath := filepath.Join(dirPath, newName)
|
||||
|
||||
err := os.Rename(oldPath, newPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to rename %s to %s: %v\n", oldName, newName, err)
|
||||
} else {
|
||||
fmt.Printf("Renamed: %s -> %s\n", oldName, newName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue