|
#!/usr/bin/ruby |
|
# -*- coding: utf-8 -*- |
|
|
|
class FileList |
|
def initialize(filelist) |
|
@filelist = filelist |
|
@disposedlist = nil |
|
end |
|
|
|
def disposeList() |
|
#skipがnilでない場合、空行まで読み飛ばす |
|
skip = nil |
|
#ディレクトリ名 |
|
dir = '.' |
|
|
|
permission = Permission.new() |
|
|
|
@filelist.each_line{|tmpline| |
|
|
|
if /^$/ =~ tmpline |
|
#空行の場合はskipにnilをセット |
|
skip = nil |
|
|
|
elsif skip |
|
#skipがnilでない場合は読み飛ばす(何もしない) |
|
|
|
elsif /\/.git/ =~ tmpline |
|
# .git というディレクトリは除外(次の空行までskip) |
|
skip = 1 |
|
|
|
elsif /^total/ =~ tmpline |
|
#要らない行 |
|
|
|
elsif /^(.+):$/ =~ tmpline |
|
#ディレクトリ名 |
|
dir = $1 |
|
|
|
elsif /([-a-z]{10}).+?\d{1,2}:\d{1,2} +(.+)/ =~ tmpline |
|
if $2 != '.git' && $2!='.' && $2!='..' |
|
permission.setString($1) |
|
@disposedlist = @disposedlist.to_s << permission.toOctet().to_s << ' ' << dir << '/' << $2 << "\n" |
|
end |
|
|
|
end |
|
} |
|
return self |
|
end |
|
|
|
def makeChmodAll(filename) |
|
fp = open(filename,'w') |
|
if fp != nil |
|
@disposedlist.each_line{|tmpline| |
|
fp.puts 'chmod ' << tmpline |
|
} |
|
return 0 |
|
else |
|
return nil |
|
end |
|
end |
|
|
|
end |
|
|
|
|
|
class Permission |
|
|
|
def initialize() |
|
@permission_string = nil |
|
@permission_octet = nil |
|
end |
|
|
|
def setString(permission_string) |
|
if /[-dlrwx]{10}/ =~ permission_string |
|
@permission_string = permission_string |
|
@permission_octet = self.toOctet() |
|
else |
|
self.init() |
|
end |
|
|
|
return @permission_string |
|
end |
|
|
|
def toOctet() |
|
if /[-dlrwx]{10}/ =~ @permission_string |
|
u = 0;g = 0;o = 0; |
|
u += (@permission_string[1]!=45 ? 4 : 0) |
|
u += (@permission_string[2]!=45 ? 2 : 0) |
|
u += (@permission_string[3]!=45 ? 1 : 0) |
|
g += (@permission_string[4]!=45 ? 4 : 0) |
|
g += (@permission_string[5]!=45 ? 2 : 0) |
|
g += (@permission_string[6]!=45 ? 1 : 0) |
|
o += (@permission_string[7]!=45 ? 4 : 0) |
|
o += (@permission_string[8]!=45 ? 2 : 0) |
|
o += (@permission_string[9]!=45 ? 1 : 0) |
|
@permission_octet = (u.to_s << g.to_s << o.to_s).to_i |
|
end |
|
return @permission_octet |
|
end |
|
|
|
end |
|
|
|
#main routine |
|
FileList.new(`ls -Rla `).disposeList().makeChmodAll('chmodall.sh') |