В системах Unix / Linux функция chmod
поддерживает «символьные режимы», то есть вы можете делать то, что по существу является бит-арифметикой с разрешениями, например, chmod u+x ...
является символической формой для добавления исполняемых прав доступа для пользователя. Функция chmod
в Ruby's FileUtils
поддерживает только абсолютную битовую маску в качестве разрешения, т. Е. Вы можете делать только FileUtils.chmod(0777, ...)
, но FileUtils.chmod('u+x', ...)
не будет работать.
Я понял, что один из способов сделать это - просто вызвать команду system
напрямую: system("chmod u+x ...")
, но я бы предпочел хранить код в домене Ruby настолько, насколько это возможно, без порождения оболочек повсюду. В качестве альтернативы, я мог бы перебирать File
объекты, File.stat
их, получать их существующие битовые маски и изменять их индивидуально, но символические режимы будут поддерживать файловый шарик, который гораздо более лаконичен и менее подвержен ошибкам.
Кто-нибудь знает, есть ли способ сделать это более изящным способом?