我是一名印刷师,使用许多文件名不正确或不完整的字体。我在Mac上并且一直在使用Hazel,AppleScript和Automator工作流程,尝试自动重命名这些文件*。我需要一个脚本,用字体ttf
替换Finder中woff
,woff2
或postscriptName
文件的现有文件名。我知道可以检索我需要的PostScript名称值的工具(fc-scan
/ fontconfig
,TTX
等),但缺乏编程知识来为我的目的编写脚本。我只设法设置一个可以在添加任何匹配某些参数的文件时运行脚本的监视目录。
*为了澄清,我说的是仅更改文件名,不存储在字体中的实际名称。如果可能的话,我也可以使用任何兼容语言或脚本工作流程的脚本,例如: this post引用通过osascript
在 Shell脚本中嵌入AppleScript 。
StackExchange帖子我已经咨询过:
How to get Fontname from OTF or TTF File?
How to get PostScript name of TTF font in OS X?
How to Change Name of Font?
Automate Renaming Files in macOS
的其他:
https://github.com/dtinth/JXA-Cookbook/wiki/Using-JavaScript-for-Automation
https://github.com/fonttools/fonttools
https://github.com/devongovett/fontkit
https://www.npmjs.com/package/rename-js
https://opentype.js.org/font-inspector.html
http://www.fontgeek.net/blog/?p=343
https://www.lantean.co/osx-renaming-fonts-for-free
修改:按要求添加以下内容
1)一个典型的webfont的屏幕截图,说明了字体系列和样式名称的表单字段通常是不完整,空白还是包含非法字符。
2)描绘的woff文件(也称为base64)。
提前谢谢大家!
答案 0 :(得分:5)
由于你在问题中提到了Automator,我想我会尝试解决这个问题,同时使用它来重命名文件,以及标准的Mac bash来获取字体名称。希望它能够学习整个编程语言。
我不知道您的工作流程是什么,所以我会给您留下任何偏差,但这里有一种选择字体文件的方法,并从“服务”中将文件重命名为字体的后记name ...基于Apple的元数据,特别是" com_apple_ats_name_postscript"。这是使用' mdls'检索的数据之一。从终端上的字体文件。要关注postscript名称,请grep name_postscript的输出。为简单起见,我将排除所选文件的路径。
字体名称采集
所以......运行这个命令......
mdls GenBkBasBI.ttf | grep -A1 name_postscript
...生成此输出,其中包含FontBook的Postscript名称。 ' A1'在grep中返回找到的行和后面的第一行,它是包含实际字体名称的行。
com_apple_ats_name_postscript = (
"GentiumBookBasic-BoldItalic"
用更多的bash(tr,tail)来清理它......
tr -d \ | tail -n 1 | tr -d \"
按顺序,这些剥离空格,除最后一行之外的所有行和引号。所以对于第一个' tr'例如,反斜杠后有一个额外的空格。
在一行中,它看起来像这样......
mdls GenBkBasBI.ttf | grep -A1 name_postscript | tr -d \ | tail -n 1 | tr -d \"
......并制作这个......
GentiumBookBasic-BoldItalic
现在,这是包含上述bash命令的工作流程。我从这个问题的答案中得到了可变用法的想法......
Apple Automator “New PDF from Images” maintaining same filename
Automator工作流程
在顶部;服务接收选定的文件或文件夹'在&Finder'。
这个(或Get Specified ...)允许测试。使用它作为服务可以避免这种情况。
这是为了记住要重命名的文件
这是我们使用bash的地方。 $ f是选定/指定的文件。我正在跑步' zsh'无论出于何种原因您可以将其设置为您正在运行的任何内容,大概是' bash'。
将bash输出分配给变量。这将由新文件名的最后一个操作使用。
调用要重命名的指定/选定文件。
我将其设置为“仅限基本名称”'所以它将单独留下扩展名。输入'文字'来自行动4的变量。