使い方
./ls-lR_to_chmod.pl < ls-lRの結果 > setperm.sh
ls-lR_to_chmod.plの内容
#!/usr/bin/perl sub to_chmod_perm_chunk { my $perm = shift; $perm =~ tr/-//d; if ($perm eq '') { $perm = '-'; } elsif ($perm =~ /[ST]$/) { $perm =~ tr/ST/st/; } elsif ($perm =~ /[st]$/) { $perm =~ s/([st])$/x$1/; } return $perm; } sub to_chmod_perm { my $perm = shift; return 'u=' . to_chmod_perm_chunk(substr($perm, 1, 3)) . ',g=' . to_chmod_perm_chunk(substr($perm, 4, 3)) . ',o=' . to_chmod_perm_chunk(substr($perm, 7, 3)); } use constant FIELD_COUNT => 9; my $dir; while (<>) { chomp; if (/^[d-]/) { my @fields = split(/\s+/, $_, FIELD_COUNT); my $perm = @fields[0]; my $file = @fields[FIELD_COUNT - 1]; print 'chmod ' . to_chmod_perm($perm), ' ', $dir . '/' . $file, "\n"; } elsif (/(.*):$/) { $dir = $1; } }
出力されたシェルスクリプトを実行はrootで行ってください。
ls -lRを相対パス指定で実行したときは、出力されたシェルスクリプトを実行するときも同じディレクトリに移動してください。
つまり↓こんな感じです。
sudo -s cd 【ls -lRを実行したディレクトリ】 sh 【上記で出力したsetperm.shのフルパス】