это действительно странно, когда я использую File.exist? или File.exists? Я обнаружил, что он нечувствителен к регистру?
2.7.0-preview1 :001 > Dir.entries('.')
=> [".", "..", "ppp", "FOO", "Bar"]
2.7.0-preview1 :002 > File.exist? "foo"
=> true
2.7.0-preview1 :003 > File.exist? "FOO"
=> true
2.7.0-preview1 :004 > File.exist? "FOOBAR"
=> false
2.7.0-preview1 :005 > File.exists? "FOO"
=> true
2.7.0-preview1 :006 > File.exists? "foo"
=> true
Как я могу сделать файл.exist чувствительным к регистру? ? Я использую macOS Catalina 10.15.3
Обновление
Для вопроса @Stefan: почему я задаю этот вопрос, это просто я? я практикую фрагмент кода из книги - Ruby Cookbook ver.2, и рецепт состоит в том, чтобы переименовать файлы оптом, как показано ниже:
require 'find'
module Find
def rename(*paths)
unrenamable = []
find(*paths) do |file|
next unless File.file? file # skip directory
path, name = File.split(file)
new_name = yield name
if new_name && new_name != name
new_path = File.join(path, new_name)
if File.exist? new_path
unrenamable << file
else
puts "Renaming #{file} to #{new_path}" if $DEBUG
File.rename(file, new_path)
end
end
end
unrenamable
end
module_function(:rename)
end
, и первый вариант использования - преобразовать все имена файлов. в нижний регистр
File.rename('./') { |f| f.downcase }
Строка if File.exist? new_path
будет иметь значение true, если old_path и new_path просто различаются в верхнем или нижнем регистре, тогда все файлы «не могут быть восстановлены»