Make Directory/File List
mkdirlist.pl is a simple Perl script to generate a PIKT directory or file list objects file (see, for example, dirs_system_redhat_linux_objects.cfg).
As with other scripts, we source mkdirlist.pl from the programs.cfg PIKT configuration file (or perhaps a mkdirlist_programs.cfg #include file; not shown). The end-use, target script follows.
#!/usr/bin/perl # mkdirlist.pl - make directory/file list objects file # # $ARGV[0] refers to a type, either "d" for directories, or "f" for files # within the specified directories # $ARGV[1] refers to a quoted list of directories # # for example: # # mkdirlist.pl d "/bin /boot /dev /etc [...] /usr /var" $t = $ARGV[0]; $d = $ARGV[1]; open(PASSWD, "/etc/passwd"); while (<PASSWD>) { /^([^:]+):[^:]+:(\d+):/; $user{$2} = $1; } close(PASSWD); open(GROUP, "/etc/group"); while (<GROUP>) { /^([^:]+):[^:]+:(\d+):/; $group{$2} = $1; } close(GROUP); open(FIND, "/usr/bin/find $d -type $t -exec /bin/ls -ld {} \\; |"); while (<FIND>) { #print "$_"; chomp; /^(\S+)\s.+\s(\S+)$/; $m = $1; $f = $2; = stat($f); printf "%s %s %o %s %s %s %s\n", $f, $m, $s[2] & 07777, $s[4], $s[5], $user{$s[4]}, $group{$s[5]}; } close(FIND); exit 0;
So, you might make directory and file list objects files (on a Red Hat Linux system) as follows:
# /pikt/lib/programs/mkdirlist.pl d "/bin /boot /dev /etc ... /usr /var" > /pikt/lib/configs/objects/adm/dirs_system_redhat_linux_objects.cfg # /pikt/lib/programs/mkdirlist.pl f "/bin /boot /dev /etc ... /usr" > /pikt/lib/configs/objects/adm/files_system_redhat_linux_objects.cfg
Note that some additional cleanup of the script output may be required.
For more examples, see Samples.