source: keep-skel/trunk/fuentes/keep-skel.install/usr/bin/keep-skel @ 2386

Last change on this file since 2386 was 2386, checked in by kbut, 4 years ago

add blacklist to keep-skel

  • Property svn:executable set to *
File size: 1.7 KB
Line 
1#!/usr/bin/perl -w
2
3use strict;
4use warnings;
5use Getopt::Long;
6use File::Find;
7use File::Copy;
8
9# Variables
10
11my $results;
12my $verbose;
13my @skelfiles;
14my @users;
15my $user;
16my $force;
17my $num_args;
18my @rules;
19my $rulespath = '/usr/share/keep-skel/rules';
20sub get_rules(){
21        if ( -e $rulespath ){
22                open(my $fd ,$rulespath );
23                while(my $row = <$fd>){
24                        chomp $row;
25                        push(@rules,$row);
26                }
27        }
28}
29
30sub show_usage()
31{
32        print "[USAGE]: keep-skel [--user] [--force]\n";
33        exit;
34}
35
36sub wanted()
37{
38        # Foreach file in /etc/skel/
39        # copy on $HOME directory if not exists
40
41        # Destination file
42        my $needle = $File::Find::name;
43        $needle =~ s/\/etc\/skel\///g;
44        foreach(@rules){
45                if ($needle =~ /$_/ ){
46                        return;
47                }
48        }
49        my $destinationFile="";
50        $destinationFile=$File::Find::name;
51        $destinationFile =~ s/\/etc\/skel/\/home\/$user/g;
52        print $destinationFile."\n";
53        return ;
54        # If it is a directory....
55        if ( -d $File::Find::name ) 
56        {
57                unless ( -d $destinationFile)
58                {
59                        print "[DEBUG] This is a directory\n";
60                        system("mkdir -p $destinationFile");
61                }
62                else
63                {
64                        print "[DEBUG] Skipping $File::Find::name\n";
65                }
66        }
67        elsif ( -e $File::Find::name ) 
68        {
69                unless ( -e $destinationFile and not $force)
70                {
71                        print "This is a file\n";
72                        copy($File::Find::name,$destinationFile) or die "[DEBUG] Copy failed: $!";     
73                }
74                else
75                {
76                        print "[DEBUG] Skipping $File::Find::name\n";
77                }
78        }
79        else
80        {
81                die "[DEBUG] : What the hell is this? --> $File::Find::name\n";
82        }       
83       
84}
85
86
87# MAIN
88
89
90$num_args= $#ARGV +1;
91
92if ( $num_args == 0) 
93{
94        show_usage()
95} 
96
97$results = GetOptions("user=s" =>\@users,
98                      "force" =>\$force,       
99                      "verbose"=>\$verbose
100                        );
101get_rules();
102foreach (@users)
103{
104        $user=$_;
105        find(\&wanted, "/etc/skel/");
106
107} 
Note: See TracBrowser for help on using the repository browser.