从文件名的开头删除一串数字或文本

Remove A String of Numbers or Text From The Beginning of A Filename

在 MacOS Sierra (MacBook Pro) 上,如何批量删除 .pdf 文件名开头的随机数字字符串,以便可以按字母顺序查看它们?例如这是这些文件如何显示在 Finder 中的示例,其中数字影响字母顺序:

22169203 Gregory Zuckerman 有史以来最伟大的交易 Excerpt.pdf

22681256 示例 PDF 获取 Money.pdf

24225401印度电影Industry.pdf

24309156 开始 运行 你自己的咖啡店和午餐 Bar.pdf

24375874 古典音乐训练的 5 个步骤 Riyaz.pdf

24538682 100 口头 Signals.pdf

24861279 100 最伟大 Songs.pdf

24975456 预约簿Preview.pdf

25169832 如何为 Free.pdf

创业

25283738建筑现代公关Campaigns.pdf

26672829 World.pdf

中最大的股票市场

26852793 Nnadi 为股票初学者提供的秘密实用指南免费电子书 Jane.pdf

27012881 食物的价值和价格 Carlo 的 Terra Madre 节选 Petrini.pdf

27114721 社交媒体营销 Services.pdf

27881968简介3.pdf

28097572 电影 PDF.pdf

这个 shell 小脚本将使用顶部定义的正则表达式重命名文件,删除名称前面的数字。请注意,此脚本应 运行 与 PDF 位于同一目录中,否则您将需要在 for 循环中更改目录。

#!/bin/bash
regex="([0-9]*.)(([a-zA-Z0-9]*|.*)*\.pdf)"
for filename in *.pdf; do
    if [[ $filename =~ $regex ]]
    then
    mv "$filename" "${BASH_REMATCH[2]}"
  fi  
done

说明

可以找到所用正则表达式的详细分类 here。它比我在 post.

中解释得更清楚

mv 命令将第一个参数(在本例中为具有原始名称的 PDF)移动到在最后一个参数中指定的目标(在本例中为正则表达式的第二个捕获组)。 BASH_REMATCH是一个数组,存放正则表达式运算的结果。在这种情况下,我们使用了第二个索引,它存储文件名减去前缀数字。 This article 更详细地解释了 bash 正则表达式。