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

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

我正在寻找某种形式的流程,让用户选择一个文件夹并循环遍历所有文件并清除相应文件名中的任何斜线、连字符等。

我在 Windows 上编程,但这在 OSX 上有点超出我的理解范围。

我找到了这个(自动程序从单个字符串中删除坏字符)但需要一些可以迭代并且易于使用且可在 Mac 网络上的用户之间分发的东西。

感谢您的任何建议帮助

答案1

OS X 中不允许在文件名中使用的字符只有 NUL 和 ASCII 正斜杠或 ASCII 冒号(具体取决于上下文)。在 Finder 中显示为正斜杠的字符在 shell 中显示为冒号,反之亦然。

你也可以使用如下 shell 命令:

for f in *;do mv "$f" "${f//[^0-9A-Za-z.]}";done
find . -type f|while read f;do b=${f##*/};mv "$f" "${f%/*}/${b//[^[:alnum:].]}";done
brew install rename;find . -type f -exec rename 's/[^0-9A-Za-z.\/]/-/g;s/-+/-/g' {} \;
rename -z *

或者直接使用类似姓名粉碎机

答案2

我将其包装到应用程序中,以便您可以轻松地重新分发它。它会要求一个文件夹,然后清理文件名。

https://github.com/slhck/sanitize-filenames

您还可以在 Automator 中手动创建以下应用程序:

您所要做的就是:

  • 询问 Finder 项目(您应该只允许文件夹)

  • 将此结果设置为变量

  • 运行 shell 脚本(需要传递输入作为参数代替到标准输入

      for f in "$1"/*; do
        dir="$(dirname "$f")"
        file="$(basename "$f")"
        mv -- "$f" "${dir}/${file//[^0-9A-Za-z.]}"
      done
    

相关内容