diff options
Diffstat (limited to 'tests/rwx-to-mode')
-rwxr-xr-x | tests/rwx-to-mode | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/rwx-to-mode b/tests/rwx-to-mode new file mode 100755 index 0000000..fbeb670 --- /dev/null +++ b/tests/rwx-to-mode @@ -0,0 +1,49 @@ +#!/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. + +# Copyright (C) 2000, 2005 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +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 |