文件/文件夹名称的无效字符过滤器? (ruby)

问题描述:

我的脚本从网上下载文件,然后将它们保存在从同一个Web服务器获取的名称下。我需要一个筛选器 /卸妆无效字符文件/文件夹名称在Windows NTFS下。文件/文件夹名称的无效字符过滤器? (ruby)

我也很乐意为多平台过滤器。

注:像htmlentities将是巨大的....

+0

的可能的复制[如何使一个Ruby字符串安全的文件系统?](https://stackoverflow.com/questions/1939333/how-to-make-a-ruby-string-safe-for-a-filesystem) – 2018-02-20 14:41:38

与Geo一样,通过使用gsub,您可以轻松地将所有无效字符转换为有效字符。例如:

file_names.map! do |f| 
    f.gsub(/[<invalid characters>]/, '_') 
end 

你需要的所有文件名可能会在他们的可能的字符是不允许在文件系统上,以取代<invalid characters>。在上面的代码中,每个无效字符被替换为_

Wikipedia告诉我们,以下字符不允许在NTFS:

  • U + 0000(NUL)
  • /(斜杠)
  • \(反斜杠)
  • :(冒号)
  • *(星号)
  • ? (问号)
  • “(引号)
  • <(小于)
  • (大于)

  • |(管道)

所以你gsub调用可能是这样的:

file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') } 

它用下划线替换所有无效字符。

+1

@liwp:这绝对是一个解决方案。我知道gsub,但想知道是否有任何宝石,甚至可以跨平台。通常他们几乎没有任何东西;-)感谢您的代码。 – Radek 2010-02-16 22:22:58

我觉得你最好的选择是gsub上的文件名。我知道你需要删除/替换的其中一项是:

我不知道你打算以后如何使用这些文件,但几乎最可靠的解决方案是将原始文件名保存在数据库表(或其他序列化的散列)中,并在唯一ID之后命名物理文件你(或数据库)生成。

PS此方法的另一个优点是您不必担心具有相同名称(或过滤为相同名称的不同名称)的文件。

+0

我猜人类需要看这些文件。即使他删除了不需要的字符,该文件的名称仍然可能对某人有意义,而ID可能不会。 – Geo 2010-02-16 15:17:59

+0

好的,那么。例如,如果您只打算通过HTTP进一步提供这些文件,那么ID就可以。 – 2010-02-16 17:51:05

filename_string.gsub(/[^\w\.]/, '_') 

说明:替换一切,除了字字符(字母,数字,下划线)