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

Jib*_*bes 3 regex macos

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

例如:

10002ASmith.pdf > 10002.pdf

1023A琼斯.pdf > 1023.pdf

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

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

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

提前感谢您的帮助!

乔恩

pti*_*tim 8

NameChanger听起来很适合这个目的 - 它是免费的,并且会在应用之前预览建议的批量正则表达式重命名。

在下面的示例中,我使用了 regex ^(\d+).*,并替换为$1.pdf.

正则表达式重命名


wer*_*ter 5

我建议在 shell 中使用findsed来完成此操作,但采用 @anubhava 提议的更简单的方式。但是,请注意,当文件中包含空格时,它将不起作用。处理空白的版本会稍微复杂一些。

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

解释:

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

管道会将建议的命令回显到终端。如果您对结果感到满意,您可以通过将输出通过管道传输到 shell 命令来重新运行它,例如

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果你使用bash.

\n