V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
huntagain2008
V2EX  ›  分享创造

小白批量下载 100 个 mp3 文件之后重命名的挣扎过程

  •  
  •   huntagain2008 · 2022-07-08 10:49:46 +08:00 · 2702 次点击
    这是一个创建于 630 天前的主题,其中的信息可能已经有所发展或是发生改变。
    下载得到
    凡人修仙传( 1401-1500 ) 1.mp3
    凡人修仙传( 1401-1500 ) 2.mp3
    ……
    凡人修仙传( 1401-1500 ) 100.mp3


    想得到
    0001.mp3
    0002.mp3
    ...
    0100.mp3

    $ rename -v 's/凡人修仙传( 1401-1500 )//' *.mp3
    1.mp3
    2.mp3
    ...
    100.mp3

    不会在前面补零,只好写 shell 脚本
    #!/bin/sh
    #
    #
    folder=download
    dir=`pwd`

    for file in $dir/$folder/*
    do
    mv $file `echo $file | awk -F/ '{printf("%04d.mp3\n", $NF)}'`
    done


    结束
    19 条回复    2023-09-10 13:02:48 +08:00
    imicksoft
        1
    imicksoft  
       2022-07-08 10:53:30 +08:00
    Bulk Rename Utility
    xJogger
        2
    xJogger  
       2022-07-08 11:18:50 +08:00
    Total Commander
    TrevorPhillips
        3
    TrevorPhillips  
       2022-07-08 11:20:53 +08:00 via Android   ❤️ 1
    牛逼,直接给逼得写了 bat 脚本
    我都是用等死吧的工具 Renamer https://www.den4b.com/products/renamer
    (网址很好记,就是等死吧)
    TrevorPhillips
        4
    TrevorPhillips  
       2022-07-08 11:22:06 +08:00 via Android
    @TrevorPhillips 眼花了 linux 啊,当我上面没说
    imKiva
        5
    imKiva  
       2022-07-09 12:44:42 +08:00
    bash:
    find . -name "*.mp3" -exec bash -c 'mv "$0" "$(printf %04d $(tmp=${0##* } ; echo ${tmp%%.*})).mp3"' {} \;

    zsh 支持嵌套字符串操作,可以:
    find . -name "*.mp3" -exec zsh -c 'mv $0 $(printf %04d ${${0##* }%%.*}).mp3' {} \;
    milukun
        6
    milukun  
       2022-07-09 16:22:56 +08:00
    用 mac 的话,直接全选右键重命名就可以。
    brsyrockss
        7
    brsyrockss  
       2022-07-10 20:00:34 +08:00
    给你两个工具,会写正则就行,一个叫 rename ,另一个叫 advanced renamer ,第二个复杂一些,我用第二个做过和你一样的事情,注意先拿别得文件练练手,有些东西删了就好再整理了。
    另:建议文件不要纯 0001 0002 ,如果你有两个小说文件夹,都是同样命名方式,搜 0001 会出来 2 个结果,只能用路径来判断,可以编号后面跟个 -XXX 名字
    lovestudykid
        8
    lovestudykid  
       2022-07-10 23:38:43 +08:00
    awk 都会用了,还什么小白啊...
    lovestudykid
        9
    lovestudykid  
       2022-07-10 23:40:09 +08:00
    搜了下,rename 本身就可以 pad
    huntagain2008
        10
    huntagain2008  
    OP
       2022-07-11 07:49:08 +08:00 via iPhone
    @lovestudykid 我只看了《 UNIX 编程环境 1983 版》前 6 章(花 5 块钱买了的书),只会很浅显的入门知识。
    huntagain2008
        11
    huntagain2008  
    OP
       2022-07-11 11:40:15 +08:00
    小白用 python 版的批量重命名

    #!/usr/bin/env python3
    # 凡人修仙传( 1401-1500 ) 1.mp3 => 凡人修仙传 0001.mp3
    #
    import os
    import sys
    path = "/home/ht/下载 /"

    try:
    >>>>prefix = sys.argv[1]
    except IndexError:
    >>>>print("usage: python3 rename_pad.py argv1")
    >>>>sys.exit(1)

    for filename in os.listdir(path):
    >>>>num = filename[:-4].split()[-1]
    >>>>suffix = filename[-4:]
    >>>>num = num.zfill(4)
    >>>>new_filename = prefix + "_" + num + suffix
    >>>>os.rename(os.path.join(path, filename), os.path.join(path, new_filename))
    huntagain2008
        12
    huntagain2008  
    OP
       2022-07-11 13:29:09 +08:00
    rename 版, stackoverflow 比较容易查到这类简单问题
    ht@ht-3470:~/下载$ rename 's/凡人修仙传( 1401-1500 ) //' *.mp3
    1.mp3; 2.mp3......;100.mp3

    ht@ht-3470:~/下载$ rename 's/\d+/sprintf("凡人修仙传_%04d",$&)/e' *.mp3
    凡人修仙传_0001.mp3; 凡人修仙传_0001.mp3......;凡人修仙传_0100.mp3
    qzhai
        13
    qzhai  
       2022-07-11 15:40:16 +08:00
    说出来你可能不信,mac 访达 自带 持批量重命名。。。。
    huntagain2008
        14
    huntagain2008  
    OP
       2022-07-11 16:26:12 +08:00
    @qzhai 说来不好意思,至今不会用 Mac 。 昨天是试了访达的重命名,感觉不太好用,也许是我不会用。
    我给旧笔记本装的 xubuntu ,发现它自带的批量重命名有替换、补齐、正则等,比我现在用的 kubuntu 的重命名强不少。

    当然 windows 上的重命名软件就更多了,最近用过的菲菲更名宝贝,还有 Microsoft PowerToys
    kemistep
        15
    kemistep  
       2022-07-11 17:16:50 +08:00
    python 快捷多了;
    ```
    """
    文件名批量修改
    示例:尚硅谷 2021 版 React 技术全家桶全套完整版(零基础入门到精通-男神天禹老师亲授) (P1. 001_尚硅谷 react 教程_react 简介).mp4
    """
    import os, re, shutil
    dst_dir = r"G:\FFOutput\react_shangguigu" #replace \ with /
    os.chdir(dst_dir)
    file_list = os.listdir(dst_dir)
    for file in file_list:
    new_name = re.findall(r'P.*?\.mp4$',file) # \u4E00-\u9FA5
    if len(new_name)>=1:
    print(new_name)
    os.rename(file,new_name[0])
    ```
    [python 文件名批量修改 - ministep88 - 博客园]( https://www.cnblogs.com/ministep/p/15587015.html )
    runningowl
        16
    runningowl  
       2022-07-12 12:23:19 +08:00
    windows 的 powertoys 有重命名
    liberty1900
        17
    liberty1900  
       201 天前
    我最近用 node 写了个脚本,解决了类似问题,特来考古

    https://gist.github.com/librz/61156e472cc83fcb94ab8c99f874bcae
    huntagain2008
        18
    huntagain2008  
    OP
       201 天前
    @liberty1900 现在看来,重命名多个文件已经不是问题。并不需要写什么脚本,还是用带图形界面的软件更好。系统自带的更好。即使真的要用脚本或命令行工具,也需具备 rename -n 这样的预览功能,再未改名之前先看个效果。毕竟是不可逆的操作。专业的重命名软件都提供 log 或备份。

    现在我都是用 Xubuntu 的 FileManager 自带的重命名。可重命名多个文件。

    选中多个文件,按 F2 就进入对话框。可用在文件名、后缀、名称和后缀。

    音频标签
    插入日期
    插入/改写
    移除字符
    搜索与替换
    编号
    大写/小写

    正式改名之前,都可在新名称这一列看到预览效果,确认无误,再点击重命名文件的按钮。

    rename 这个命令行工具也有 -n 选项可以不修改文件名,只预览新文件名的效果。
    liberty1900
        19
    liberty1900  
       201 天前
    @huntagain2008 我这脚步默认就是 Dry Run ,手动加 -r 选项才会真正 rename
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5395 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:58 · PVG 16:58 · LAX 01:58 · JFK 04:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.