Linux中批量删除文件名中的特殊字符

Linux中批量删除文件名中的特殊字符

我正在寻求从几个下载的 .pdf 文件中删除所有特殊字符,并且遇到了我正在寻找的解决方案,尽管是在 OS X 环境中:

在 MacOS X 中保存文件名时自动删除特殊字符的功能

是否可以在 Linux 环境中实现类似的方法(使用sed或其他功能)?

答案1

您可以使用以下rename命令执行此操作。如果您所在的文件夹中包含带有特殊字符的 .pdf 文件:

rename 's/[^a-zA-Z0-9]//g' *.pdf

这将删除以 AZ 结尾的文件中的所有字符(.pdf无论是大写还是小写)或数字。您可以添加到此列表中:

rename 's/[^a-zA-Z0-9_]//g' *.pdf

此版本允许下划线。

答案2

处理整个文件名以及多个文件:

  • 添加/g以处理整个文件名。
  • 添加_下划线替换(如果需要)
  • 在末尾添加任何其他“类型”的文件或单独的文件名,以空格分隔。

重命名“s/[^a-zA-Z0-9_.]/_/g”*mp4 *avi

答案3

有一个非常方便的工具叫排毒它将为您完成这种转换/重命名。

您可以向其传递一个目录名(最终递归)或特定文件的模式:

detox ./

或者

detox *.pdf

它与大多数 Linux 发行版捆绑在一起。

答案4

对于 * 中的文件;执行 mv "$file" $(echo "$file" | sed -e 's/[^A-Za-z0-9.-]//g'); 完成 &

相关内容