【问题标题】:Rename a bunch of files on mac在mac上重命名一堆文件
【发布时间】:2023-03-26 15:17:01
【问题描述】:

我想在mac上重命名一堆文件,我想知道是否有一个实用程序可以做到这一点,或者我是否需要进入类似python的东西。这是我想做的重命名:

我想 zfill 所以数字是\d{3} 的形式,即GM008.mp3。 mac中有没有办法做到这一点,或者什么可能是最快的方法?我目前正在做的是python中的单行:

[os.rename(src, './GM' + src.split('GM')[1].split('.')[0].zfill(3) + '.mp3') for src in os.listdir('.')]
# ['GM001.mp3', 'GM000.mp3', 'GM003.mp3', 'GM007.mp3', 'GM006.mp3', 'GM012.mp3', 'GM004.mp3', 'GM005.mp3', 'GM008.mp3', 'GM009.mp3', etc...]

【问题讨论】:

  • osos.rename(src, tgt) 的最佳选择 - 我没有 mac 但它应该是不错的选择。
  • 鉴于您刚才分享的当前方法,有什么问题?它有效吗?你需要它来提高效率吗?此外,如果您只是将列表扔掉并且只需要os.rename 来获得它的副作用,那么使用列表组合会浪费内存。
  • @ggorlen 只是想知道我是否可以在不使用 python 的情况下做到这一点。即,如果在 os(甚至 unix)中可能有一种方法可以在没有某种形式的脚本的情况下对一批文件进行重命名。我在 OSX 中找到了“批量重命名”,但据我所知,它不支持正则表达式。
  • 哦,好吧——所以,没有 Python。从您最初的问题来看,这对我来说并不是很明显。

标签: python linux macos


【解决方案1】:

这应该很安全;我们正在寻找与您的 mp3 格式 GM\d+\.mp3 完全匹配的内容,并使用 zfill.mp3 之前用零填充数字。 os 与平台无关。

import os
import re

for fname in [x for x in os.listdir(".") if re.fullmatch(r"GM\d+\.mp3", x)]:
    os.rename(fname, re.sub(r"(\d+)(?=\.mp3)", lambda x: x.group(1).zfill(3), fname))

【讨论】:

  • 出于好奇,您知道是否可以仅使用正则表达式进行 zfill?我尝试了一些,但我认为在单个正则表达式中是不可能的(您可以执行 2 OR 3 之类的操作,但不能执行 1、2 或 3 位之类的操作)。
  • 不,你需要一个正则表达式的回调来检查长度并像我在这里做的那样执行填充。问题是正则表达式没有计数的概念,因此不清楚什么替代构造可能对任意长度敏感(除非某些引擎提供这样的东西)。如果您只填充 3 位数字,那么您可以通过多次替换来枚举它,但我认为这不是您想要的。
【解决方案2】:

我不确定这是否适合回答这个问题,但无论如何,以下脚本都适用于您提供的确切格式。应该很容易将其概括为使用略有不同的名称。 cd 进入包含文件的目录并运行此脚本:

import os

for filename in os.listdir("."):
    if filename.endswith(".mp3"):
        without_prefix = filename[:-4]
        # In this case, prefix = 'GM', num = the number
        prefix, num = without_prefix[:2], without_prefix[2:]
        new_name = f'{prefix}{num.zfill(3)}.mp3'
        os.rename(filename, new_name)

【讨论】:

    【解决方案3】:

    编辑 - 纠正你的问题后,我的回答可能不是最有用的,但我希望它能让你玩 Automator :)

    您可以在 Mac 中尝试 AutomatorApple Script 之类的东西。 Automator 是内置的,您可以记录您的工作流程并将其翻译成“脚本”。它非常易于使用 - 一种拖放操作。

    在启动自动机时选择应用程序,然后设置以下内容:

    这是一个例子:

    【讨论】:

    • @Krzystztof_K -- 谢谢,你能举个例子说明如何用上面的方法做到这一点吗?
    • 如果您只是在寻找.mp3,请告诉我文件夹是否有其他类型的文件?请尽可能详细说明...
    • @Krzystztof_K -- 谢谢你,但实际上你甚至不需要自动机,批量重命名可以直接在 Finder 中使用。但正如您所见,它不支持 zfill(尝试输入“001”),因此此处显示的这种方法不起作用。哦,实际上我看到了“让所有数字 [ ] 数字变长……这可能有用。”
    • @David542 不用担心,试一试!您可以创建“服务”(在创建新的 Automator 文档类型时),然后只需选择所有文件,右键单击并从上下文菜单中选择您的“服务”。比运行 python 脚本更快。
    • @Krysztof_K 我试过了,似乎不支持正则表达式(至少使用 finder 命令)。您的方法只是从 1 开始重命名它们,但如果项目以 GM004 开头怎么办?
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2020-01-23
    • 2012-04-10
    • 2010-11-16
    • 1970-01-01
    • 2016-05-12
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多