#!/bin/bash if [ $# -lt 1 ]; then echo "usage: ${0##*/} /path/to/traverse/permissions/of" exit 1 fi IFS="\/" read -a AR <<< "$1" for S in "${AR[@]}"; do T="$T/$S" gawk -v T="${T//\/\///}" ' BEGIN { Re=""; Gr=""; E=""; } function h(s) { X=substr(s,3,1) switch(X) { case "x": c=Gr break default: c=Re } return sprintf("%s%s%s%s", substr(s,1,2),c,X,E) } $0~/Uid/{ sub("/","",$5) sub("/","",$9) U=h(substr($2,8,3)) G=h(substr($2,11,3)) O=h(substr($2,14,3)) printf "%3s%3s%3s %5d:%5d %s\n",U,G,O,$5,$9,T }' < <(stat "$T") done