V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Chigogo
V2EX  ›  问与答

Bash 里面,如何基于现有的、多个有规则的文件名,改之成另外一批有规则的文件名

  •  
  •   Chigogo · 2015-04-26 22:31:08 +08:00 · 2845 次点击
    这是一个创建于 3498 天前的主题,其中的信息可能已经有所发展或是发生改变。

    >find . -type f -name \*.mkv -print
    ./[三国演义_第01集_桃园三结义].Romance.Of.The.Three.Kingdoms.1994.EP01.DVDRiP.x264.DualAudio-Whm303.mkv
    ./[三国演义_第02集_十常侍乱政].Romance.Of.The.Three.Kingdoms.1994.EP02.DVDRiP.x264.DualAudio-Whm303.mkv

    改成
    第01集-桃园三结义.mkv
    第02集-十常侍乱政.mkv
    21 条回复    2015-04-27 19:25:22 +08:00
    Chigogo
        2
    Chigogo  
    OP
       2015-04-26 22:42:30 +08:00
    @LazyZhu 其实我知道查找,就是不知道如何改名。。捕获组。。。
    LazyZhu
        3
    LazyZhu  
       2015-04-26 22:45:33 +08:00
    上面贴的就是你要的
    我可以给你写出你想要的,但以后遇到类似问题你仍然不会,不如自己试着写.
    lululau
        4
    lululau  
       2015-04-26 22:47:52 +08:00
    google下rename, prename 之类的工具
    spacewander
        5
    spacewander  
       2015-04-26 22:52:57 +08:00
    name="./[三国演义_第01集_桃园三结义].Romance.Of.The.Three.Kingdoms.1994.EP01.DVDRiP.x264.DualAudio-Whm303.mkv"
    name=${name#*_}
    echo "${name%]*}.mkv"

    大概像这样?
    orzfly
        6
    orzfly  
       2015-04-26 23:42:21 +08:00
    jb
        7
    jb  
       2015-04-26 23:50:12 +08:00
    感觉直接rename不就好了?
    比如有test1.cpp test2.cpp test3.cpp test4.cpp
    要改成code1.cpp code2.cpp ... code4.cpp
    直接:
    $rename test code *
    就好了呀
    jb
        8
    jb  
       2015-04-26 23:50:52 +08:00
    对不起,窝没看到你最后的结果。理解错了。。。
    extreme
        9
    extreme  
       2015-04-27 00:34:48 +08:00   ❤️ 1
    cd 存放mkv的目录
    for i in *.mkv
    do
    mv ${i} $(echo ${i} | sed -r 's/^\[.*_(.*)_(.*)\].*\.mkv$/\1-\2.mkv/g')
    done

    其实可以用更简便的rename,不过貌似并非每个发行版本的rename都是正则表达式版本。
    rename 's/^\[.*_(.*)_(.*)\].*\.mkv$/$1-$2.mkv/g' *.mkv
    extreme
        10
    extreme  
       2015-04-27 00:39:40 +08:00
    @extreme 除非你也修改正则表达式,否则记得上面的命令的*.mkv不要改成其他的,即使是./*.mkv(把^改成.*吧),如果改了,正则表达式可能就无法匹配了。
    LazyZhu
        11
    LazyZhu  
       2015-04-27 04:08:12 +08:00   ❤️ 1
    for episode in *.mkv; do
    mv ${episode} ${episode:6:4}-${episode:11:5}.mkv
    done
    # Tested under Debian7.8
    Chigogo
        12
    Chigogo  
    OP
       2015-04-27 07:28:57 +08:00
    @LazyZhu
    @extreme
    @jb
    @spacewander
    @lululau
    @orzfly

    感谢大家的悉心解答,Bash 的工具太多的,刚入门,掌握起来有点痛苦,不过我会努力的!!!谢谢你们提供的资料和方法论。

    大家是如何熟用Bash的?
    zhigang1992
        13
    zhigang1992  
       2015-04-27 07:48:40 +08:00 via iPad
    sublime text,multicursor
    ilotuo
        14
    ilotuo  
       2015-04-27 10:00:26 +08:00 via Android
    搭车求一个有没有专门做正则表达式练习的网站?
    Chigogo
        15
    Chigogo  
    OP
       2015-04-27 13:11:27 +08:00
    @zhigang1992 那个是编辑器,我要的是文件操作。。。
    dofine
        16
    dofine  
       2015-04-27 13:52:20 +08:00
    massren - easily rename multiple files using your text editor https://github.com/laurent22/massren
    反正 bash 我是一直没学会。。
    orzfly
        17
    orzfly  
       2015-04-27 14:27:07 +08:00
    @Chigogo 如果你非要觉得编辑器不能干文件操作……
    https://dl.dropboxusercontent.com/u/225892/rename-with-sublime.mp4

    cc @zhigang1992
    Chigogo
        18
    Chigogo  
    OP
       2015-04-27 19:14:31 +08:00
    @orzfly OK,Sublime 太牛逼!
    Chigogo
        19
    Chigogo  
    OP
       2015-04-27 19:16:13 +08:00
    @orzfly 你也是太牛逼,你用什么工具做的。。。。从教程的制作到发布。。。!!!!
    Chigogo
        20
    Chigogo  
    OP
       2015-04-27 19:18:27 +08:00
    @orzfly Dropbox直接支持外链?还是说只能在对应页面访问?
    vimutt
        21
    vimutt  
       2015-04-27 19:25:22 +08:00
    acdsee 批量重命名可以搞定 哈哈 这个太弱了哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 23:48 · PVG 07:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.