golang Добавляет точки перед форматами картинок, если их нет
/*
golang
Добавляет точки перед форматами картинок, если их нет
Использовать так:
go run addPointForNameImages.go /путь/к/папке
*/
package main
import (
"fmt"
"os"
"strings"
)
// Проверка ошибок
func checkErr(err error) {
if err != nil {
panic(err)
}
}
// Достаём путь к папке
func getDirPath() string {
args := os.Args[1:]
if len(args) != 0 {
return args[0]
}
return "."
}
// Добавляет в названии точку
func nameToNameWithPoint(name string) string {
// Необходимые форматы
needFormats := [4]string{"jpg", "jpeg", "png", "webp"}
needFormatsLen := [4]int{}
// Добавляем размеры
for i, format := range needFormats {
needFormatsLen[i] = len(format)
}
length := len(name)
if length <= 3 {
return name
}
indexPoint := 0
lowerName := strings.ToLower(name)
for i, format := range needFormats {
if lowerName[length-needFormatsLen[i]:] == format {
indexPoint = length - needFormatsLen[i]
break
}
}
if (indexPoint == 0 || name[indexPoint-1] == 46) {
return name
}
//fmt.Println(rune('.')) 46
return name[:indexPoint] + "." + lowerName[indexPoint:]
}
// Читает данные с папки
func readDir(dirPath string) []os.FileInfo {
dir, err := os.Open(dirPath)
checkErr(err)
defer dir.Close()
files, err := dir.Readdir(-1)
checkErr(err)
return files
}
// Показывает названия элементов
func showFiles(files []os.FileInfo) {
for i, file := range files {
fmt.Printf("%d) %s\n", i, file.Name())
}
}
// Переименовывает названия элементов
func renameFilesTofilesWithPoint(dirPath string, files []os.FileInfo) {
dirPath += "/"
nameWithPoint := ""
name := ""
for _, file := range files {
name = file.Name()
nameWithPoint = nameToNameWithPoint(name)
if nameWithPoint == name {
continue
}
oldPath := dirPath + name
newPath := dirPath + nameWithPoint
fmt.Printf("rename %s to %s\n", oldPath, newPath)
err := os.Rename(oldPath, newPath)
checkErr(err)
}
}
// Старт
func main() {
dirPath := getDirPath()
files := readDir(dirPath)
//showFiles(files)
renameFilesTofilesWithPoint(dirPath, files)
}