Я хочу сохранить файл как /a/b/c/d.txt, но я не знаю, существует ли какой-либо из этих каталогов, и мне нужно рекурсивно создавать их при необходимости. Как это сделать в рубине?
Вставлять системную команду в подпроцесс - не лучшая идея. Лучше сделать это со стандартной библиотекой Ruby, чтобы получить обработку ошибок, проверить результат и т. Д.
Возникает вопрос: «Я хочу сохранить файл как /a/b/c/d.txt, но не знаю, существует ли какой-либо из этих каталогов». Мое решение позволяет использовать существующий путь к файлу ('/a/b/c/d.txt') и без отдельного анализа создавать все папки.
Вадим Темиров
Вы имеете в виду, что это позволяет делать FileUtils.mkdir_p '/a/b/c'+ создавать d.txtодновременно?
noraj
Неа, вместо этого разрешает Pathname('/a/b/c/d.txt').dirname.mkpathи File.write('/a/b/c/d.txt', content)без filename = '/a/b/c/d.txt'.rpartition('/').lastи остальной парсинг,
Вадим Тёмиров
0
Вы также можете использовать свою собственную логику
FileUtils
иPathname
, вероятно, являются наиболее важными инструментами для написания сценариев оболочки Ruby.Используйте mkdir_p для рекурсивного создания каталога
источник
Если вы работаете на unixy-машинах, не забывайте, что вы всегда можете запустить команду оболочки под ruby, поместив ее в обратные кавычки.
источник
File.makedirs
источник
mkdir_p
иmkpath
ruby-doc.org/stdlib-2.6.5/libdoc/fileutils/rdoc/…Путь на помощь!
источник
FileUtils.mkdir_p '/a/b/c'
+ создаватьd.txt
одновременно?Pathname('/a/b/c/d.txt').dirname.mkpath
иFile.write('/a/b/c/d.txt', content)
безfilename = '/a/b/c/d.txt'.rpartition('/').last
и остальной парсинг,Вы также можете использовать свою собственную логику
Итак, если путь равен 'tmp / a / b / c', если 'tmp' не существует, создается 'tmp', затем 'tmp / a /' и так далее, и так далее.
источник