gpt4 book ai didi

regex - Mac 上的批量重命名文件正则表达式

转载 作者:行者123 更新时间:2023-12-04 15:43:26 69 4
gpt4 key购买 nike

我正在尝试批量重命名 PDF 文件以从右到左删除所有字符,直到在 Mac OS 上到达数字字符。

例如:

10002ASmith.pdf > 10002.pdf

1023AJones.pdf > 1023.pdf

文件开头的数字长度是可变的,所以我认为最好让正则表达式从右到左重命名,直到达到一个数字。

我知道 Mac Yosemite 具有批量重命名功能,但没有看到正则表达式重命名选项。在终端中执行此操作是否容易,如果可以,如何执行,或者是否有免费程序可用于使用正则表达式?

我想我只需要知道实际的正则表达式是什么,因为我在正则表达式方面经验不足。

提前感谢您的帮助!

乔恩

最佳答案

我建议在 shell 中使用 findsed ,但以@anubhava 提出的更简单的方式。但是,请注意,当文件中有空格时它不起作用。处理空格的版本会稍微复杂一些。

find . -maxdepth 1 -name '*.pdf' | while read filename; do newfilename=`echo $filename | sed '/[0-9]/s/[^0-9]*\.pdf/.pdf/'`; echo mv $filename $newfilename; done

解释:
  • find . -maxdepth 1 -name '*.pdf' — 全部打印 .pdf当前目录下的文件;
  • while read filename; do + done — 将对来自 find 的每一行进行操作的循环结果(行保存在 filename 变量中);
  • /[0-9]/s/[^0-9]*\.pdf/.pdf/ ——那是“业务”部分。它由正则表达式地址 /[0-9]/ 组成(这意味着“仅对包含数字的文件名应用以下命令”)和 s命令;
  • s表达式本身,s/[^0-9]*\.pdf$/.pdf/ , 意思是“尽可能多地找出非数字字符,然后是.pdf和名字的结尾,并把它改为.pdf”;
  • 命令替换让我们创建 newfilename内容。

  • 管道将向终端回显建议的命令。如果您对结果感到满意,则可以通过将输出通过管道传递给 shell 命令来重新运行它,例如
    find . -maxdepth 1 -name '*.pdf' | while read filename; do newfilename=`echo $filename | sed '/[0-9]/s/[^0-9]*\.pdf/.pdf/'`; echo mv $filename $newfilename; done | bash

    如果您使用 bash .

    关于regex - Mac 上的批量重命名文件正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521420/

    69 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com