我知道这基本上已经得到解答,带有 shell 脚本 (Sanitize Filenames) 的自动程序运行良好,但我也需要它来处理所有子文件夹。如果可能的话,将文件名缩减为 50 个字符,同时保留文件扩展名。我找到了一行 bash 代码,它截断了文件,但它也删除了扩展名,这在将这些文件从 Mac 传输到 Windows 时效果不佳。
目前的脚本是这样的
for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[[:cntrl:]\\\/:*?\"<>|]/_}"
done
我并不反对在automator中使用applescript来完成这个任务。
答案1
您可以使用find
。OSX/Darwin 中的选项find
与其他 *nix 变体中的选项略有不同,因此其中一些功能可能不适用于您,但您将了解要点并可以使用可用的选项:
find -regextype posix-extended -regex '.*\/[^\/]*[[:cntrl:]\\:*?"<>|].*' -print \
-exec mv "{}" "$(echo "{}" | perl -ane 'chomp; s/[[:cntrl:]\\:*?"<>|]//g; print' -)"