find [base directory] -type [f|d] -exec chmod [perm] {} \;
####
#!/usr/bin/perl -w
use strict;
use Getopt::Long;
use File::Find;
my %opts = (
verbose => '',
directory => './',
filemode => '',
dirmode => ''
);
if(!GetOptions('verbose' => \$opts{'verbose'},
'filemode:s' => \$opts{'filemode'},
'dirmode:s' => \$opts{'dirmode'})) {
usagedie();
}
#make sure each argument passed is either a file or directory
foreach (@ARGV) {
usagedie() if (!-f || !-d);
}
#we need to perform at least one option
usagedie() if (!$opts{'filemode'} && !$opts{'dirmode'});
#use default directory if argument not set on command line
find(\&fileop, $opts{'directory'}) unless @ARGV;
find(\&fileop, @ARGV) if @ARGV;
sub fileop {
#set the right permissions based on if a file or a directory
#only set permissions of the mode is set
chmod oct($opts{'filemode'}), $_ if -f && $opts{'filemode'};
chmod oct($opts{'dirmode'}), $_ if -d && $opts{'dirmode'};
print $File::Find::name . "\n" if $opts{'verbose'} && (-f || -d);
}
sub usagedie {
print "Usage: setperm.pl [-v] [-f perm] [-d perm] [Directory]\n";
print "-v, --verbose\t show files changed by script\n";
print "-f, --filemode\t octal mode to change files to\n";
print "-d, --dirmode\t octal mode to change directories to\n";
exit(0);
}
##
##
#!/usr/bin/perl -w
use strict;
use Getopt::Long;
use File::Find;
my %opts = (
verbose => '',
filemode => '',
dirmode => ''
);
if (!GetOptions(\%opts, 'verbose', 'filemode:s', 'dirmode:s')) {
usagedie();
}
#make sure each argument passed is either a file or directory
foreach (@ARGV) {
usagedie() if (!-f && !-d);
}
#we need to perform at least one option
usagedie() if (!$opts{'filemode'} && !$opts{'dirmode'});
#make sure correct octal values were used
$opts{'filemode'} = chkperm('File', $opts{'filemode'});
$opts{'dirmode'} = chkperm('Directory', $opts{'dirmode'});
#use default directory if argument not set on command line
find(\&fileop, @ARGV ? @ARGV : './');
sub fileop {
#set the right permissions based on if a file or a directory
#only set permissions if the mode is set
if (-f && $opts{'filemode'}) {
chmod $opts{'filemode'}, $_;
}
elsif (-d && $opts{'dirmode'}) {
chmod $opts{'dirmode'}, $_;
}
else {
#dont print if we didnt modify file perms
return;
}
print $File::Find::name . "\n" if $opts{'verbose'};
}
sub chkperm {
my ($type, $perm) = @_;
#zero length strings are defined values
#our $perm 's by default are set to ''
if ($perm) {
return ($perm =~ /^[0-7]{4}$/)
? oct($perm)
: die "Incorrect $type mode $perm\n";
}
return;
}
sub usagedie {
print "Usage: setperm.pl [-v] [-f perm] [-d perm] [Directory]\n";
print "-v, --verbose\t show files changed by script\n";
print "-f, --filemode\t octal mode to change files to\n";
print "-d, --dirmode\t octal mode to change directories to\n";
exit(1);
}