-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinstallsh
executable file
·77 lines (66 loc) · 1.86 KB
/
installsh
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
#! /bin/sh
if [ -x /bin/true ]; then TRUE=/bin/true;
elif [ -x /usr/bin/true ]; then TRUE=/usr/bin/true;
else echo "Can't find /bin/true or /usr/bin/true" ; exit 1;
fi
while ${TRUE} ; do
mkdirs=0
while [ $# -ge 0 ] ; do
case $1 in
-d) mkdirs=1 ;;
-o) shift; owner=$1 ;;
-g) shift; group=$1 ;;
-m) shift; mode=$1 ;;
-*) break 2 ;;
*) break ;;
esac
shift
done
if [ $mkdirs -eq 1 ] ; then
dirs=$*
for dir in $dirs ; do
case $dir in
/*) ;;
*) echo "directory name must begin with /; $dir does not" ; exit 1 ;;
esac
stack=""
while [ "$dir" != "/" ] ; do
stack="$dir $stack"
dir=`dirname $dir`
done
for dir in $stack ; do
if [ ! -d $dir ] ; then
if mkdir $dir ; then
if [ "$owner" != "" ] ; then chown $owner $dir ; fi
if [ "$group" != "" ] ; then chgrp $group $dir ; fi
if [ "$mode" != "" ] ; then chmod $mode $dir ; fi
fi
fi
done
done
else
nargs=$#
if [ $nargs -lt 2 ] ; then break ; fi
files=""
while [ $# -ne 1 ] ; do
files="$files $1"
shift
done
dest=$1
if [ ! -d $dest -a $nargs -ne 2 ] ; then break ; fi
for file in $files ; do
destfile=$dest
if [ -d $destfile ] ; then destfile=$destfile/`basename $file` ; fi
if cp -f -p $file $destfile ; then
if [ "$owner" != "" ] ; then chown $owner $destfile ; fi
if [ "$group" != "" ] ; then chgrp $group $destfile ; fi
if [ "$mode" != "" ] ; then chmod $mode $destfile ; fi
fi
done
fi
exit 0
done
echo "usage: $0 [ -o owner] [ -g group ] [ -m mode ] file dest"
echo " $0 [ -o owner] [ -g group ] [ -m mode ] file file ... dir"
echo " $0 -d [ -o owner] [ -g group ] [ -m mode ] dir dir ..."
exit 1