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

bum*_*una 12 mac macos

我正在寻找某种形式的过程,让用户选择一个文件夹并循环遍历所有文件并清除所有斜杠、连字符等......从各自的文件名中删除。

我在 Windows 上编程,但这有点超出我在 OSX 上的深度。

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

感谢您的任何建议帮助

slh*_*hck 16

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

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

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

您所要做的就是:

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

  • 将此结果设置为变量

  • 运行 shell 脚本(您需要将输入作为参数而不是stdin传递)

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

  • +props 提供下载和易于使用的说明。 (3认同)
  • 您可以使用 `${file//[[:cntrl:]\\\/:*?\"<>|]/_}` 来删除所有 Windows 禁止的字符,这将增强互操作性。请参阅 [this answer] (http://stackoverflow.com/a/62888/1424087) 有关其他 Windows 细节(如 CON/NUL/... 和文件名长度)的信息。 (2认同)

Lri*_*Lri 13

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 *
Run Code Online (Sandbox Code Playgroud)

或者只是使用像Name Mangler这样的应用程序: