Re: [問題] Linux下Bash批次更改檔名(數百、千個檔)已刪文

看板Linux作者 (Neisseria)時間8年前 (2017/08/17 23:30), 8年前編輯推噓8(805)
留言13則, 7人參與, 最新討論串5/6 (看更多)
提供一下 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
我覺得asm版快出來了XD
08/18 00:57, 1F

08/18 01:30, , 2F
bash一行文的東西弄成這麼複雜幹嘛
08/18 01:30, 2F

08/18 02:28, , 3F
推薦文章!
08/18 02:28, 3F

08/18 08:23, , 4F
老實說使用go或使用python來開發這類需求,是有一點拿
08/18 08:23, 4F

08/18 08:23, , 5F
牛刀殺雞就是。一般經驗來說若單純bash的話稍微注意一
08/18 08:23, 5F

08/18 08:23, , 6F
下檔案名稱有特別的字元以及空白基本上就可以了
08/18 08:23, 6F

08/18 12:02, , 7F
bash一行可以搞定的東西真的不用這麼複雜
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
連go都來惹,推一個!
08/19 15:03, 11F

08/19 15:04, , 12F
等一下會不會有fortran?
08/19 15:04, 12F

08/19 23:24, , 13F
fortran 領域差太多 XD
08/19 23:24, 13F
文章代碼(AID): #1PbRQV1J (Linux)
文章代碼(AID): #1PbRQV1J (Linux)