Проблема не имеет отношения к тильдам.
Dir::glob
не обещает вернуть отсортированный список. Я подозреваю, что ваш shift(2)
предназначен для избавления от .
и ..
, но они не первые два элемента в списке. Кроме того, вам не нужно использовать banged версию reverse
для возврата на место.
Явно отклоните эти фантомные каталоги:
Dir.
glob("*", File::FNM_DOTMATCH).
reject { |a| a =~ /\A\.+\z/ }. # ⇐ THIS
map { |p, i| p.force_encoding(Encoding::UTF_8) }.
sort_by { |d| File.mtime(d) }.
reverse
# $ touch ~setup~.mak
# $ ruby -e 'puts Dir.glob("*", File::FNM_DOTMATCH).reject { |a| a =~ /\A\.+\z/ }'
#⇒ ~setup~.mak