macOS Finder 服务(通过 Automator)用破折号替换 "special chars"

macOS Finder service (via Automator) to replace "special chars" with dashes

我想用 Automator 创建一个 Finder Services 插件,删除 "special chars" [\W___]+ 并用破折号替换它们。这最终能否通过 sed 和 mv 的组合来实现,然后通过 "Run Shell Script" 添加到 Automator 工作流程?

背景: 我在一个名为 ForkLift 的应用程序中编写了一个这样的动作,请参见图片 ForkLift RegEx Action,但也希望在 Finder 中也有类似的功能。

替换文件名的选定文本

创建一个新的 Automator 服务。确保它 Receives input as text from Finder,并选中 Replace selected text with output(或类似的东西)的选项。

添加一个 运行 Shell 脚本 接收来自 stdin:

的输入的动作
#!/bin/bash
input="$(</dev/stdin)"  # assign contents of stdin to variable
shopt -s extglob        # activate extended pattern matching
output="${input//+([![:alnum:]_])/-}" # replace runs of non-alphanumeric, non-underscore
                                      # characters with a single hyphen
printf '%s' "$output"   # print the result

正在重命名所选文件

创建一个新的 Automator 服务。确保 Receives input as file/folder from Finder.

添加一个 运行 Shell 脚本 接收输入 作为参数的动作 :

#!/bin/bash
shopt -s extglob        # activate extended pattern matching
for f in "$@"; do
    filename="$(basename "$f")"
    dirpath="$(dirname "$f")"

    filename="${filename//+([![:alnum:]_.])/-}"
    mv "$f" "$dirpath/$filename"
done

重命名模式的细微差别是为了防止句点 (".") 被替换,否则会删除所有文件扩展名。