Last active
May 2, 2022 16:32
-
-
Save neetsdkasu/d2f1e1f29ebdee6a15991c02cd839b6b to your computer and use it in GitHub Desktop.
ファイル(*.*)を 30 個ずつ連番ディレクトリ(dir???)に分けるだけ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module division | |
go 1.18 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ファイル(*.*)を 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