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