Skip to content

Instantly share code, notes, and snippets.

@neetsdkasu
Last active May 2, 2022 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neetsdkasu/d2f1e1f29ebdee6a15991c02cd839b6b to your computer and use it in GitHub Desktop.
Save neetsdkasu/d2f1e1f29ebdee6a15991c02cd839b6b to your computer and use it in GitHub Desktop.
ファイル(*.*)を 30 個ずつ連番ディレクトリ(dir???)に分けるだけ
module division
go 1.18
// ファイル(*.*)を 30 個ずつ連番ディレクトリ(dir???)に分けるだけ
package main
import (
"flag"
"fmt"
"log"
"os"
"path/filepath"
)
var Size int = 30
func main() {
var ok bool
flag.BoolVar(&ok, "ok", false, "実行するときにフラグ立てる")
flag.IntVar(&Size, "size", 30, "ファイルを分けるサイズ")
oldUsage := flag.Usage
flag.Usage = func() {
fmt.Println("ファイル(*.*)を", Size, "個ずつ連番ディレクトリ(dir???)に分けるだけ")
oldUsage()
}
flag.Parse()
if !ok {
fmt.Println("okフラグ必須")
flag.Usage()
os.Exit(2)
return
}
if err := run(); err != nil {
log.Panic(err)
}
}
func Min(a, b int) int {
if a < b {
return a
}
return b
}
func run() error {
files, err := filepath.Glob("*.*")
if err != nil {
return err
}
for num := 1; 0 < len(files); num++ {
size := Min(Size, len(files))
targets := files[:size]
files = files[size:]
parentDir := filepath.Dir(targets[0])
dirname := fmt.Sprintf("dir%03d", num)
targetDir := filepath.Join(parentDir, dirname)
if err = os.MkdirAll(targetDir, 0750); err != nil {
return err
}
for _, oldPath := range targets {
filename := filepath.Base(oldPath)
newPath := filepath.Join(targetDir, filename)
if err = os.Rename(oldPath, newPath); err != nil {
return err
}
}
}
for _, f := range files {
log.Println(f)
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment