-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdip.ksh
executable file
·98 lines (81 loc) · 2.72 KB
/
dip.ksh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/ksh
# olbohlen 2016-11-17
# dumb ips pre-package-installer
builtdir="$1/"
pmfile="$2"
rootpath="$3/"
export rootpath pmfile builtdir
sed -e ':a' -e 'N' -e '$!ba' -e 's/\\\n/ /g' ${pmfile} | nawk '
$1~/^(file|dir|link|hardlink)$/
BEGIN {
printf("#foo\n") > "/tmp/files.out";
printf("#foo\n") > "/tmp/dirs.out";
printf("#foo\n") > "/tmp/links.out";
printf("#foo\n") > "/tmp/hardlinks.out";
}
{
if($1~/^dir$/) {
path=substr($0, match($0, " path=[^ ]*"), RLENGTH);
owner=substr($0, match($0, " owner=[^ ]*"), RLENGTH);
group=substr($0, match($0, " group=[^ ]*"), RLENGTH);
mode=substr($0, match($0, " mode=[^ ]*"), RLENGTH);
sub("[a-z]*=", "", path);
sub("[a-z]*=", "", owner);
sub("[a-z]*=", "", group);
sub("[a-z]*=", "", mode);
gsub(" ", "", group);
gsub(" ", "", owner);
gsub(" ", "", mode);
sub("^0", "", mode);
sub("^ ", ENVIRON["rootpath"], path);
printf("mkdir %s\nchown %s:%s %s\nchmod %s %s\n", path, owner, group, path, mode, path) >> "/tmp/dirs.out";
}
if($1~/^file$/) {
srcpath=$2;
path=substr($0, match($0, " path=[^ ]*"), RLENGTH);
owner=substr($0, match($0, " owner=[^ ]*"), RLENGTH);
group=substr($0, match($0, " group=[^ ]*"), RLENGTH);
mode=substr($0, match($0, " mode=[^ ]*"), RLENGTH);
sub("[a-z]*=", "", path);
sub("[a-z]*=", "", owner);
sub("[a-z]*=", "", group);
sub("[a-z]*=", "", mode);
gsub(" ", "", group);
gsub(" ", "", owner);
gsub(" ", "", mode);
sub("^0", "", mode);
sub("^ ", ENVIRON["rootpath"], path);
sub("^", ENVIRON["builtdir"], srcpath);
printf("cp %s %s\nchown %s:%s %s\nchmod %s %s\n", srcpath, path, owner, group, path, mode, path) >> "/tmp/files.out";
}
if($1~/^link$/) {
path=substr($0, match($0, " path=[^ ]*"), RLENGTH);
target=substr($0, match($0, " target=[^ ]*"), RLENGTH);
sub("[a-z]*=", "", path);
sub("[a-z]*=", "", target);
sub("^ ", "", target);
sub("^ ", ENVIRON["rootpath"], path);
e=split(path,a,"/")
for(i=1;i<e;i++) {
dirname=sprintf("%s%s/", dirname,a[i]);
}
printf("(cd %s && ln -s %s%s %s)\n", ENVIRON["rootpath"], dirname, target, path) >> "/tmp/links.out";
dirname="";
}
if($1~/^hardlink$/) {
path=substr($0, match($0, " path=[^ ]*"), RLENGTH);
target=substr($0, match($0, " target=[^ ]*"), RLENGTH);
sub("[a-z]*=", "", path);
sub("[a-z]*=", "", target);
sub("^ ", "", target);
sub("^ ", ENVIRON["rootpath"], path);
e=split(path,a,"/")
for(i=1;i<e;i++) {
dirname=sprintf("%s%s/", dirname,a[i]);
}
printf("(cd %s && ln %s%s %s)\n", ENVIRON["rootpath"], dirname, target, path) >> "/tmp/hardlinks.out";
dirname="";
}
printf("# %s\n", $0);
}
'