Re: [問題] Linux下Bash批次更改檔名(數百、千個檔)已刪文
提供一下 Go (golang) 的版本,照小州大的程式的邏輯重寫
基本上,這件事用 Go 有點浪費
只是 Go 是最接近腳本語言的編譯語言,剛好拿來練習一下
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
)
func main() {
if len(os.Args) != 2 {
log.Fatal("No valid destination")
}
dest := os.Args[1]
path, err := filepath.Abs(dest)
if err != nil {
log.Fatal(err)
}
stat, err := os.Stat(path)
if os.IsNotExist(err) {
log.Fatal("Destination is not valid")
}
mode := stat.Mode()
if !mode.IsDir() {
log.Fatal("Destination is not a directory")
}
re := regexp.MustCompile("海賊王 第([0-9]+)集 繁體中文翻譯.mp4")
fs, err := ioutil.ReadDir(dest)
if err != nil {
log.Fatal(err)
}
for _, f := range fs {
if !f.IsDir() {
match := re.FindStringSubmatch(f.Name())
var newFile string
if match != nil {
newFile = fmt.Sprintf("OnePiece v%s.mp4", match[1])
}
if newFile != "" {
oldPath := filepath.Join(path, f.Name())
newPath := filepath.Join(path, newFile)
err := os.Rename(oldPath, newPath)
if err != nil {
log.Fatal(err)
}
}
}
}
}
執行方式如下:
$ go run file.go /path/to/dest
這種事還是要用腳本語言才是正途 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.165.227
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1502983839.A.053.html
※ 編輯: Neisseria (175.182.165.227), 08/17/2017 23:32:00
推
08/18 00:57, , 1F
08/18 00:57, 1F
推
08/18 01:30, , 2F
08/18 01:30, 2F
推
08/18 02:28, , 3F
08/18 02:28, 3F
推
08/18 08:23, , 4F
08/18 08:23, 4F
→
08/18 08:23, , 5F
08/18 08:23, 5F
→
08/18 08:23, , 6F
08/18 08:23, 6F
推
08/18 12:02, , 7F
08/18 12:02, 7F
推
08/18 23:55, , 8F
08/18 23:55, 8F
推
08/19 02:01, , 9F
08/19 02:01, 9F
→
08/19 02:01, , 10F
08/19 02:01, 10F
推
08/19 15:03, , 11F
08/19 15:03, 11F
→
08/19 15:04, , 12F
08/19 15:04, 12F
→
08/19 23:24, , 13F
08/19 23:24, 13F
討論串 (同標題文章)
完整討論串 (本文為第 5 之 6 篇):
Linux 近期熱門文章
21
56
PTT數位生活區 即時熱門文章