File: install

package info (click to toggle)
stex 1.2.1%2Bgit20171204.g5e4f0ca-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid, trixie
  • size: 604 kB
  • sloc: makefile: 108; sh: 61
file content (73 lines) | stat: -rwxr-xr-x 1,554 bytes parent folder | download | duplicates (7)
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
#! /bin/sh
# follows symbolic links.  to do otherwise is painful.

usage() {
  echo "usage: $0 [ -o owner] [ -g group ] [ -m mode ] -d dir ..."
  echo "       $0 [ -o owner] [ -g group ] [ -m mode ] file destfile"
  echo "       $0 [ -o owner] [ -g group ] [ -m mode ] file file ... destdir"
  exit 1
}

installone() {
  cp -f -p $1 $2
  if [ "$owner" != "" ] ; then chown $owner $2; fi
  if [ "$group" != "" ] ; then chgrp $group $2; fi
  if [ "$mode" != "" ] ; then chmod $mode $2; fi
}

mkdir=0

while [ $# -ge 0 ] ; do
  case $1 in
    -d) mkdir=1 ;;
    -o) shift; owner=$1 ;;
    -g) shift; group=$1 ;;
    -m) shift; mode=$1 ;;
    -*) usage ;;
    *) break ;;
  esac
  shift
done

if [ $mkdir -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="$dir"
    while [ "$dir" != "/" ] ; do
      stack="$dir $stack"
      dir=`dirname $dir`
    done

    for dir in $stack ; do
      if [ ! -e $dir ] ; then
        mkdir $dir
        if [ "$owner" != "" ] ; then chown $owner $dir ; fi
        if [ "$group" != "" ] ; then chgrp $group $dir ; fi
        if [ "$mode" != "" ] ; then chmod $mode $dir ; fi
      fi
    done
  done
elif [ $# -eq 2 -a ! -d $2 ] ; then
  installone $1 $2
elif [ $# -ge 2 ] ; then
  files=""
  while [ $# -ne 1 ] ; do
    files="$files $1"
    shift
  done
  dest=$1

  if [ ! -d $dest ]; then usage; fi

  for file in $files ; do
    installone $file $dest/`basename $file`
  done
else
  usage
fi