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
重命名模式的细微差别是为了防止句点 ("."
) 被替换,否则会删除所有文件扩展名。
我想用 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
重命名模式的细微差别是为了防止句点 ("."
) 被替换,否则会删除所有文件扩展名。