Chigogo
V2EX  ›  问与答

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

  •  
  •   Chigogo · Apr 26, 2015 · 3659 views
    This topic created in 4059 days ago, the information mentioned may be changed or developed.

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

    大概像这样?
    orzfly
        6
    orzfly  
       Apr 26, 2015
    jb
        7
    jb  
       Apr 26, 2015
    感觉直接rename不就好了?
    比如有test1.cpp test2.cpp test3.cpp test4.cpp
    要改成code1.cpp code2.cpp ... code4.cpp
    直接:
    $rename test code *
    就好了呀
    jb
        8
    jb  
       Apr 26, 2015
    对不起,窝没看到你最后的结果。理解错了。。。
    extreme
        9
    extreme  
       Apr 27, 2015   ❤️ 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  
       Apr 27, 2015
    @extreme 除非你也修改正则表达式,否则记得上面的命令的*.mkv不要改成其他的,即使是./*.mkv(把^改成.*吧),如果改了,正则表达式可能就无法匹配了。
    LazyZhu
        11
    LazyZhu  
       Apr 27, 2015   ❤️ 1
    for episode in *.mkv; do
    mv ${episode} ${episode:6:4}-${episode:11:5}.mkv
    done
    # Tested under Debian7.8
    Chigogo
        12
    Chigogo  
    OP
       Apr 27, 2015
    @LazyZhu
    @extreme
    @jb
    @spacewander
    @lululau
    @orzfly

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

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

    cc @zhigang1992
    Chigogo
        18
    Chigogo  
    OP
       Apr 27, 2015
    @orzfly OK,Sublime 太牛逼!
    Chigogo
        19
    Chigogo  
    OP
       Apr 27, 2015
    @orzfly 你也是太牛逼,你用什么工具做的。。。。从教程的制作到发布。。。!!!!
    Chigogo
        20
    Chigogo  
    OP
       Apr 27, 2015
    @orzfly Dropbox直接支持外链?还是说只能在对应页面访问?
    vimutt
        21
    vimutt  
       Apr 27, 2015
    acdsee 批量重命名可以搞定 哈哈 这个太弱了哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2798 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 09:25 · PVG 17:25 · LAX 02:25 · JFK 05:25
    ♥ Do have faith in what you're doing.