Skip to content

Instantly share code, notes, and snippets.

@mbogochow
Created June 21, 2018 14:08
Show Gist options
  • Save mbogochow/c201f8e46c118735f699a68be2cd292a to your computer and use it in GitHub Desktop.
Save mbogochow/c201f8e46c118735f699a68be2cd292a to your computer and use it in GitHub Desktop.
Move images from sub-directories to base
package main
import (
"fmt"
"errors"
"io/ioutil"
"path/filepath"
"path"
"os"
"log"
)
type ImgMover struct {
basedir string
}
func (imgMover ImgMover) move() error {
if fileExists(imgMover.basedir) {
fmt.Println()
return errors.New("'" + imgMover.basedir + "' does not exist!")
}
files, err := ioutil.ReadDir(imgMover.basedir)
if err != nil {
return err
}
for _, f := range files {
fmt.Println(f.Name())
if f.IsDir() {
err = filepath.Walk(path.Join(imgMover.basedir, f.Name()), imgMover.visit)
fmt.Printf("filepath.Walk() returned %v\n", err)
}
}
return nil
}
func (imgMover ImgMover) isImg(f os.FileInfo) bool {
exts := [6]string{".png", ".jpg"}
ext := filepath.Ext(f.Name())
for _, b := range exts {
if b == ext {
return true
}
}
return false
}
func (imgMover ImgMover) visit(filePath string, f os.FileInfo, err error) error {
if imgMover.isImg(f) {
dest := path.Join(imgMover.basedir, f.Name())
fmt.Printf("Rename: %s -> %s\n", filePath, dest)
os.Rename(filePath, dest)
}
return nil
}
func fileExists(file string) bool {
_, err := os.Stat(file)
return os.IsNotExist(err)
}
func main() {
if len(os.Args) == 1 {
fmt.Println("no args")
os.Exit(-1)
}
dir := os.Args[1]
imgMover := ImgMover{basedir:dir}
err := imgMover.move()
if err != nil {
log.Fatal(err)
}
}
@mbogochow
Copy link
Author

Simple Go script to move any images from subdirectories to the specified base directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment