从给定文件夹和子文件夹中的所有文件名中删除所有非法字符

从给定文件夹和子文件夹中的所有文件名中删除所有非法字符

我知道这基本上已经得到解答,带有 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' -)"

相关内容