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

作者: Neisseria (Neisseria)   2017-08-17 23:30:37
提供一下 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
作者: junorn (威廉華勒斯)   2017-08-19 02:01:00
通常看到這種伸手要語法的到後面都會作的越來越複雜,印象之前有看到類似的最後還有人貼組合語言上來..囧
作者: TWLAB (AlphaGO)   2017-08-18 23:55:00
這版真有趣
作者: bamchisu (suchi)   2017-08-18 12:02:00
bash一行可以搞定的東西真的不用這麼複雜
作者: kenduest (小州)   2017-08-18 08:23:00
老實說使用go或使用python來開發這類需求,是有一點拿牛刀殺雞就是。一般經驗來說若單純bash的話稍微注意一下檔案名稱有特別的字元以及空白基本上就可以了
作者: sppmg (sppmg)   2017-08-18 00:57:00
我覺得asm版快出來了XD
作者: chang505 (眼線)   2017-08-18 01:30:00
bash一行文的東西弄成這麼複雜幹嘛
作者: Debian (Debian)   2017-08-18 02:28:00
推薦文章!
作者: Debian (Debian)   2017-08-19 15:03:00
連go都來惹,推一個!等一下會不會有fortran?
作者: kenduest (小州)   2017-08-19 23:24:00
fortran 領域差太多 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com