mirror of
https://github.com/coreutils/coreutils.git
synced 2024-12-13 03:44:26 +08:00
33 lines
928 B
Bash
Executable File
33 lines
928 B
Bash
Executable File
#!/bin/sh
|
|
# Convert an ls-style permission string, like drwxr----x and -rw-r-x-wx
|
|
# to the equivalent chmod --mode (-m) argument, (=,u=rwx,g=r,o=x and
|
|
# =,u=rw,g=rx,o=wx). Ignore ACLs.
|
|
|
|
case $# in
|
|
1) rwx=$1;;
|
|
*) echo "$0: wrong number of arguments" 1>&2
|
|
echo "Usage: $0 ls-style-mode-string" 1>&2
|
|
exit 1;;
|
|
esac
|
|
|
|
case $rwx in
|
|
[ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-]) ;;
|
|
[ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-]+) ;;
|
|
*) echo "$0: invalid mode string: $rwx" 1>&2; exit 1;;
|
|
esac
|
|
|
|
# Perform these conversions:
|
|
# S s
|
|
# s xs
|
|
# T t
|
|
# t xt
|
|
# The `T' and `t' ones are only valid for `other'.
|
|
s='s/S/@/;s/s/x@/;s/@/s/'
|
|
t='s/T/@/;s/t/x@/;s/@/t/'
|
|
|
|
u=`echo $rwx|sed 's/^.\(...\).*/,u=\1/;s/-//g;s/^,u=$//;'$s`
|
|
g=`echo $rwx|sed 's/^....\(...\).*/,g=\1/;s/-//g;s/^,g=$//;'$s`
|
|
o=`echo $rwx|sed 's/^.......\(...\).*/,o=\1/;s/-//g;s/^,o=$//;'$s';'$t`
|
|
echo "=$u$g$o"
|
|
exit 0
|