소스 검색

Rewrote mklinks in Perl

Alois Mahdal 12 년 전
부모
커밋
72900240d2
1개의 변경된 파일35개의 추가작업 그리고 21개의 파일을 삭제
  1. 35
    21
      mklinks

+ 35
- 21
mklinks 파일 보기

@@ -1,4 +1,4 @@
1
-#!/bin/sh
1
+#!/usr/bin/perl
2 2
 
3 3
 # ============================================
4 4
 # mklinks
@@ -27,28 +27,42 @@
27 27
 # ============================================
28 28
 
29 29
 
30
-if [ -z "$1" ];
31
-    then echo "usage: $0: DOTROOT [PREFIX]";
32
-    exit 1;
33
-fi;
30
+use strict;
31
+use warnings;
32
+use Getopt::Long;
34 33
 
35
-dotroot=$1
36
-prefix=$HOME
34
+sub usage { print STDERR "usage: $0: DOTROOT [PREFIX]\n"; exit 1; }
37 35
 
38
-if [ -n "$2" ];
39
-    then prefix=$2;
40
-fi;
36
+my $dotroot;
37
+my $prefix;
41 38
 
39
+my $opts = GetOptions(
40
+    'dotroot=s' =>  \$dotroot,
41
+    'prefix=s' =>   \$prefix
42
+) or usage;
42 43
 
43
-ls $dotroot | while read item;
44
-do
45
-    source=$dotroot/$item;
46
-    target=$prefix/.$item;
47
-    if [ -e $target ];
48
-    then
49
-        echo "target exists: $target" 1>&2;
50
-    else
51
-        ln -s $source $target;
52
-    fi;
53
-done;
44
+$dotroot = $dotroot // shift;
45
+$prefix = $prefix // shift;
46
+$prefix = $prefix // $ENV{HOME};
47
+$dotroot or usage;
48
+
49
+sub mklinks {
50
+    my $dotroot = shift;
51
+    my $prefix = shift;
52
+    -d $dotroot or die "not a directory: $dotroot";
53
+    my @dirs = `ls $dotroot`;
54
+    foreach my $dir (@dirs) {
55
+        chomp $dir;
56
+        my $source = "$dotroot/$dir";
57
+        my $target = "$prefix/.$dir";
58
+        `mkdir -p $prefix`;
59
+        if (-e $target) {
60
+            warn "target exists: $target\n";
61
+        } else {
62
+            `ln -s $source $target`;
63
+        }
64
+    }
65
+}
66
+
67
+mklinks($dotroot, $prefix);
54 68