我经常在 MacOS X(10.6)中从网页创建 PDF 文件,并且经常遇到这样的问题:自动建议的文件名(基于网页名称)包含许多特殊字符。
所以我想知道:有没有一种简单的方法(苹果脚本,shell脚本,OS X服务)可以接受一个字符串(比如这个文件名)并将其转换为
- 删除所有空格和其他特殊字符(包括那些在 OS X 中允许但在 Windows 或 Linux 中禁止的字符!!因为我经常将文件传输到我们的电脑)
- 也许每个单词(删除空格后)都以大写字母开头
- ... 还有什么重要的事情?
我正在使用 Quicksilver,因此也许可以创建一个命令,使得可以用转换后的字符串替换当前文本选择(在文件另存为...对话框中)。
答案1
您可以创建一个 Automator 服务,在所有支持服务的应用程序中执行此操作(几乎所有应用程序都是如此)。
打开 Automator 并选择创建服务接收选定的文本在任何应用程序并检查输出替换选定的文本。
添加单个运行 Shell 脚本从库中选中“action”,并粘贴以下脚本代码:
sed 's|[^a-zA-Z0-9]||g'
此特定脚本,一个简单的sed
替换将从文件名中删除所有非字母数字字符。它使用a-zA-Z0-9
允许字符的白名单,根据需要将其添加到其中。
您还可以执行其他操作,并将它们串联在一起。例如,tr [A-Z] [a-z]
将所有内容小写,并将sed 's|[^a-zA-Z0-9]||g' | tr [A-Z] [a-z]
两者结合起来。
另存为例如清理文件名,并可选择分配键盘快捷键系统偏好设置 » 键盘 » 键盘快捷键 » 服务。您也可以使用 Quicksilver 调用服务,只需输入其名称即可。
当你另存为…或类似的对话框,选择建议的文件名(默认选择):
调用服务程序菜单 » 服务 » 清理文件名(或者使用您调用的键盘快捷键)。它将通过脚本传输文件名,并使用其输出来替换选择。
对于标题大小写和删除坏字符(我还保留下划线、点和连字符),以下脚本代码似乎对我最有效:
perl -ane 'foreach $wrd(@F){print ucfirst($wrd)." ";}' | sed 's|[^a-zA-Z0-9_.-]||g'
答案2
与 Daniel 的想法相同。创建服务在自动机。 更换运行 Shell 脚本shell /usr/bin/ruby
,并添加以下内容:
input, output = STDIN.read, ""
input.each("\s") {|word| output << word.capitalize}
puts output.gsub!(/[^0-9A-Za-z\-]/, '')
这将为您获取大写字母,当然,如果您懂 Ruby,还可以做更多。您可以使用 QuickSilver 触发服务,但我猜您需要先使用 AppleScript 激活浏览器。