123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- use strict;
- use warnings;
- use Getopt::Long;
- use File::Spec;
-
- sub usage { print STDERR "usage: $0: DOTROOT [PREFIX]\n"; exit 1; }
-
- my $dotroot;
- my $prefix;
- my @masks;
-
- my $opts = GetOptions(
- 'dotroot=s' => \$dotroot,
- 'prefix=s' => \$prefix,
- 'masks=s' => \@masks
- ) or usage;
-
- @masks = @masks ? @masks : qw ( .config .local/share );
-
- $dotroot = $dotroot // shift;
- $prefix = $prefix // shift;
- $prefix = $prefix // $ENV{HOME};
- $dotroot or usage;
-
- sub mklinks {
- my $dotroot = shift;
- my $mask = shift;
- $dotroot =~ s|/?$||;
- if ($mask) {
- $dotroot .= $mask;
- }
- if (not -d $dotroot) { warn "not a directory: $dotroot\n"; return }
- my @dirs = `ls $dotroot`;
- foreach my $dir (@dirs) {
- chomp $dir;
- my $source = File::Spec->rel2abs("$dotroot/$dir");
- my $target;
- if ($mask) {
- $target = "$prefix/$mask/$dir";
- `mkdir -p $prefix/$mask`;
- } else {
- $target = "$prefix/.$dir";
- `mkdir -p $prefix`;
- }
- if (-e $target) {
- warn "target exists: $target\n";
- } else {
- # $source = File::Spec->abs2rel($source, $target);
- `ln -sr $source $target`;
- }
- }
- }
-
- mklinks($dotroot);
- mklinks($dotroot, $_) foreach (@masks);
|