Каков самый быстрый, наиболее оптимизированный и однострочный способ получить массив каталогов (исключая файлы) в Ruby?
Как насчет включения файлов?
ruby
filesystems
recursion
Лэнс Поллард
источник
источник
Ответы:
Вместо этого
Dir.glob(foo)
вы также можете написатьDir[foo]
(ноDir.glob
также можете взять блок, и в этом случае он будет выдавать каждый путь вместо создания массива).Документы Ruby Glob
источник
Dir.glob("**/")
если вам также не нужны символические ссылкиFile::FNM_DOTMATCH
флаг.Dir.glob("**/*", File::FNM_DOTMATCH)
Я считаю, что ни одно из решений здесь не касается скрытых каталогов (например, '.test'):
источник
Find.find('/tmp').collect {|_|_}
Был полезен для меняДля списка каталогов попробуйте
Список файлов сложнее, потому что в каталоге Unix также есть файл, поэтому вам нужно проверить тип или удалить записи из возвращенного списка, который является родительским для других записей.
А для получения списка всех файлов и каталогов просто
источник
Быстрый один лайнер
Только каталоги
Каталоги и обычные файлы
Чистый красивый рубин
источник
end.select {}.flatten()
часть? Мне нравится эта функция в целом. Похоже, что создадим массив массивов? Можно ли выполнить этуelseif
часть с помощью:,rec_path(child, file) << child.to_s
чтобы вы могли назначить ее массиву и получить массив строк? Спасибо!Как отмечено в других ответах здесь, вы можете использовать
Dir.glob
. Имейте в виду, что в папках может быть много странных символов, а аргументы glob являются шаблонами, поэтому некоторые символы имеют особое значение. Поэтому небезопасно делать что-то вроде следующего:Вместо этого сделайте:
источник
В PHP или других языках, чтобы получить содержимое каталога и всех его подкаталогов, вам нужно написать несколько строк кода, но в Ruby это занимает 2 строки:
это напечатает содержимое текущего каталога и всех его подкаталогов.
Или, короче, можно использовать
’**’
обозначение:Сколько строк вы напишете на PHP или на Java, чтобы получить тот же результат?
источник
Хотя это и не однострочное решение, я думаю, что это лучший способ сделать это с помощью вызовов ruby.
Сначала удалите все файлы рекурсивно.
Затем удалите все пустые каталоги.
источник
Вот пример, сочетающий динамическое обнаружение каталога проекта Rails с Dir.glob:
источник
config.assets.paths << Rails.root.join("app", "assets", "*")
, но все еще не мог видеть подпапки и файлы внутри папки с ресурсами, авторRails.application.config.assets.paths
точки возвращают ноль, используйте компактный
источник