[英]Reading unix file permissions with Ruby
是Ruby的新手,我已經在這個問題上困擾了好幾天。 我有一個目錄數組,在該目錄下,我僅想獲取其下面所有文件/目錄的3-4位文件許可權位(0744)。
問題似乎出在File :: Stat類拋出將文件轉換成整數的錯誤。
關於此問題的任何見解或文檔都將提供很大的幫助。 這是分解和轉換文件的初始代碼:
%w(/etc /bin /usr/lbin /sbin).each do |dir|
Dir.glob("#{dir}/**/*").each do |c|
m = File.stat("#{c}").world_readable?
sprintf("%o", m)
end
end
這是我的錯誤:
jtest.rb:4:in `sprintf': can't convert File::Stat into Integer (TypeError)
from jtest.rb:4
from jtest.rb:2:in `each'
from jtest.rb:2
from jtest.rb:1:in `each'
from jtest.rb:1
這不會給您您想要的嗎?
File.stat("#{c}").mode.to_s(8)
請注意,.mode給您的文件權限就像整數一樣,我想您會感到困惑,因為整數表示是以10為底的,而您在控制台中看到的權限卻顯示為8。
這應該接近您想要的:
%w(/etc /bin /usr/bin /usr/lbin /usr/usb /sbin /usr/sbin).each do |dir|
Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).each do |c| # include hidden files
unless File.symlink?(c)
puts c + " - " + File.stat(c).mode.to_s(8)
end
end
end
%w(/etc /bin /usr/bin /usr/lbin /usr/usb /sbin /usr/sbin).each do |dir|
Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).each do |file|
begin
m = File.stat(file).mode
puts "File #{file} has a permission #{File.stat(file).mode.to_s(8)}" \
if (m%512 - m%64) / 64 < m%8
rescue => e
puts "[ERR] Unable to handle #{file}. Message: #{e.message}"
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.