Créez le répertoire dir et tous ses répertoires parents.
Par exemple
require 'fileutils'
FileUtils.mkdir_p('/usr/local/lib/ruby')
Vérifiera tous les répertoires ci-dessous(Si non)Créer.
/usr
/usr/local
/usr/local/bin
/usr/local/bin/ruby
Citation https://docs.ruby-lang.org/ja/latest/class/FileUtils.html#M_MAKEDIRS
Avec les commandes Linux.
mkdir -p -m 755. / hoge1 / hoge2 / hoge3 / ruby
rubis
test.rb
require 'fileutils'
FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 755)
Merveille?
Exécutez immédiatement
$ ruby test.rb
$ ls -la
d-wxrw--wt 3 casix staff 96 Jun 12 01:06 hoge1/
Non, évidemment l'autorité n'est pas 755 ...
fileutils.rb
# File fileutils.rb, line 194
def mkdir_p(list, mode: nil, noop: nil, verbose: nil)
list = fu_list(list)
fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
return *list if noop
...
end
Si vous lisez attentivement le traitement de l'argument mis en mode
mkdir -p #{mode ? ('-m %03o ' % mode) : ''}
une
#{mode ? ('-m %03o ' % mode) : ''}
Devrait être 755,
'-m %03o ' % mode
Si vous mettez 755 en mode
irb(main):001:0> mode = 755
=> 755
irb(main):002:0> '-m %03o ' % mode
=> "-m 1363 "
1363 est retourné
Cela signifie ...
FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 755)
# ↓
# $ mkdir -p -m 1363 ./hoge1/hoge2/hoge3/ruby
Que c'était
'-m %03o ' % mode
# %Puisque 03o est émis sous la forme d'un nombre octal à 3 chiffres à 0
#En mode, le nombre obtenu en convertissant 755 en décimal(493)Mettre en
irb(main):001:0> mode = 0o755
=> 493
irb(main):002:0> '-m %03o ' % mode
=> "-m 755 "
Cela semble bon
Essayez de réparer
FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 0o755)
# FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 0755)Mais k
$ ls -la
drwxr-xr-x 3 casix staff 96 Jun 12 01:43 hoge1/
Il semble qu'il puisse être réglé avec 755!
Ce n'était pas limité à mkdir_p en premier lieu Toutes les méthodes qui peuvent spécifier l'autorisation avec FileUtils semblent avoir les mêmes spécifications
https://docs.ruby-lang.org/ja/latest/class/FileUtils.html#options
(Au fait, quand il commence à 0, il est facile d'oublier le fait que cela devient un nombre octal ...)
Recommended Posts