AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1217683
Accepted
Max Mikhalchuk
Max Mikhalchuk
Asked: 2020-03-17 14:13:45 +0800 CST2020-03-17 14:13:45 +0800 CST 2020-03-17 14:13:45 +0800 CST

同时重命名多个文件

  • 772

我有大约 180 个具有相同结构的文件:000-aaaaaaaa.txt.

文件名的正则表达式:/^[0-9]{3}\-[a-zA-Z]+$/gi(3 位数字 + -+ 字母 + .txt)。

我想剪切数字部分和-每个文件名

例如

  • 000-hello.txt->hello.txt
  • 001-world.txt->world.txt
  • 002-ubuntu.txt->ubuntu.txt
  • 003-linux.txt->linux.txt
command-line files batch-rename filename
  • 6 6 个回答
  • 5891 Views

6 个回答

  • Voted
  1. Best Answer
    user986805
    2020-03-17T14:24:27+08:002020-03-17T14:24:27+08:00

    使用mmv重命名文件:

    $ mmv '???-*' '#4'
           ^^^ ^    ^
           123 4    4
    

    您还可以将数字与范围匹配匹配:

    $ mmv '[0-9][0-9][0-9]-*.txt' '#4.txt'
             ^    ^    ^   ^        ^
             1    2    3   4        4
    

    (递归重命名文件):

    $ mmv ';???-*' '#1#5'
           ^^^^ ^    ^ ^
           1234 5    1 5
    
    • ; 扩展到任意数量的目录(与 相同**/)。
    • * 匹配任何字符零次或多次。
    • ? 匹配任何单个字符。
    • []匹配一个列表或一系列字符。
    • # 对 from 模式中的第 n 个通配符的引用。
    • 19
  2. steeldriver
    2020-03-17T14:19:36+08:002020-03-17T14:19:36+08:00

    使用基于 Perl 的rename命令:

    $ rename -n 's/\d{3}-//' [0-9][0-9][0-9]-*.txt
    rename(000-hello.txt, hello.txt)
    rename(001-world.txt, world.txt)
    rename(002-ubuntu.txt, ubuntu.txt)
    rename(003-linux.txt, linux.txt)
    

    如果文件数量大到足以使命令超过 shell 的ARG_MAX,那么您可以使用

    printf '%s\0' [0-9][0-9][0-9]-*.txt | xargs -0 rename -n 's/\d{3}-//'
    

    或者

    find . -maxdepth 1 -name '[0-9][0-9][0-9]-*.txt' -exec rename -n 's/\d{3}-//' {} +
    

    请注意,这[0-9][0-9][0-9]-*.txt是由 shell 处理的,需要是 shell glob 表达式而不是正则表达式。

    -n一旦你很高兴它正在做正确的事情,就删除它。

    • 14
  3. starbeamrainbowlabs
    2020-03-18T05:22:43+08:002020-03-18T05:22:43+08:00

    由于我在这里还没有看到它,因此您可以使用repren。虽然默认情况下没有安装它,但它确实支持基于正则表达式的文件重命名。你可以像这样只做一个正则表达式模式:

    repren --rename --from "^[0-9]{3}" --to "" --dry-run .
    

    上面的示例删除所有文件名中的前 3 位,如果它们位于当前目录中所有文件的开头,则递归地删除所有文件名中的前 3 位。它会进行试运行,以向您展示它在不实际执行的情况下会做什么 ---dry-run一旦您确定它会按照您的意图进行操作,请移除该钻头。

    repren还支持模式文件,允许您在 1 中进行多次替换:

    repren --rename --patterns=path/to/patternfile
    

    模式文件如下所示:

    regex_1<tab_character>replacement_1
    regex_2<tab_character>replacement_2
    

    ...等等。

    最后,它支持正则表达式组。考虑这个模式文件:

    # This is a comment
    figure ([0-9+])<tab>Figure \1
    

    该\1语法插入第一(bracketed)组的内容。要在命令行上执行此操作,您需要使用我认为的单引号(如果我错了,请纠正我):

    repren --rename --from 'figure ([0-9+])' --to 'Figure \1' --dry-run path/to/directory_or_files_here
    

    这只是触及repren功能的表面。它也可以选择更改文件的内容(因此在--rename上述所有示例中都需要)。

    免责声明:我不参与repren或以任何方式开发它,我只是觉得它是一种非常宝贵的节省时间的工具。

    • 2
  4. Jadrian Miles
    2020-03-18T11:56:01+08:002020-03-18T11:56:01+08:00

    我知道这个问题是用命令行标记的,但如果 GUI 工具对你有用,Thunar文件管理器有一个很棒的批量重命名工具。你可以直接从你的包管理器安装 Thunar。安装后,选择感兴趣的文件,然后转到“编辑”菜单下的“重命名”。

    Thunar 的一大优势是它可以让您预览新名称,因此您不必第一次就完全正确地获取命令或正则表达式。它还可以执行超出正则表达式范围的重命名任务,例如在文件名中插入连续数字。

    在Ubuntu 软件包网站上有更多关于 Thunar 的信息。Free Software Magazine 也有一篇关于它的不错的概述文章,并附有截图。

    • 2
  5. elliot-proton
    2020-03-18T20:37:14+08:002020-03-18T20:37:14+08:00

    我过去经常使用基于终端的文件浏览器bulkrename中的命令来完成此操作。ranger步骤如下:

    1. 导航到包含文件的目录。
    2. 选择要重命名的所有文件。如果要选择该目录中的所有内容,只需按v。
    3. 使用该:bulkrename命令,这会将您带到 vim 或默认编辑器中所有选定文件名的列表。
    4. 根据自己的喜好操作 vim 中的文件名并保存!
    • 2
  6. user25321
    2020-03-18T11:55:18+08:002020-03-18T11:55:18+08:00

    我通常会构建一个 shell 脚本来重命名每个文件。

    我将 ls 的输出放入一个文件中,我编辑该文件以制作脚本。这emacs在vim.

    如果我仍然不确定自己,我可能会将文件放在临时子目录中,以防万一出现问题。如果使用 , 我可能也会使用子目录mmv。

    • 0

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve