недопустимый фильтр символов для имени файла / папки? (Рубин) - PullRequest
4 голосов
/ 16 февраля 2010

Мой скрипт загружает файлы из сети, а затем сохраняет их под именем, взятым с того же веб-сервера. Мне нужен фильтр / для удаления недопустимых символов для имен файлов / папок в Windows NTFS.

Я был бы рад многоплатформенному фильтру.

ПРИМЕЧАНИЕ: что-то вроде htmlentities было бы замечательно ....

Ответы [ 4 ]

21 голосов
/ 16 февраля 2010

Как сказал Гео, с помощью gsub вы можете легко преобразовать все недопустимые символы в действительные символы. Например:

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

Вам необходимо заменить <invalid characters> всеми возможными символами, которые могут содержаться в именах ваших файлов, которые не разрешены в вашей файловой системе. В приведенном выше коде каждый недопустимый символ заменяется на _.

Википедия сообщает, что в NTFS запрещены следующие символы:

  • U + 0000 (NUL)
  • / (косая черта)
  • \ (обратная косая черта)
  • : (двоеточие)
  • * (звездочка)
  • ? (вопросительный знак)
  • "(цитата)
  • <(меньше чем) </li>
  • (больше чем)

  • | (Труба)

Так что ваш gsub звонок может быть примерно таким:

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

, который заменяет все недопустимые символы подчеркиванием.

14 голосов
/ 29 марта 2013
filename_string.gsub(/[^\w\.]/, '_')

Объяснение: Заменить все, кроме слово-символов (буква, цифра, подчеркивание) и точки

0 голосов
/ 16 февраля 2010

Я не знаю, как вы планируете использовать эти файлы позже, но в большинстве случаев наиболее надежным решением было бы сохранить исходные имена файлов в таблице БД (или иным образом сериализованным хэшем) и назвать физические файлы после уникального идентификатора, который вы (или база данных) сгенерированы.

PS Еще одним преимуществом этого подхода является то, что вам не нужно беспокоиться о файлах с одинаковыми именами (или разными именами, которые фильтруют по одинаковым именам).

0 голосов
/ 16 февраля 2010

Я думаю, что ваша лучшая ставка будет gsub на имя файла. Я знаю, что вам нужно удалить / заменить одну вещь: :.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...