All pastes #913125 Raw Edit

Someone

public text v1 · immutable
·published 2008-02-21 21:11 UTC
rendered paste body
#!/bin/bash -f

declare obj=$1
declare -i bValid
function octal_permissions {
        permissions=$1
        case $permissions in
              'r--') octal_value=4; ;;
              '-w-') octal_value=2; ;;
              '--x') octal_value=1; ;;
              'rw-') octal_value=6; ;;
              '-wx') octal_value=3; ;;
              'r-x') octal_value=5; ;;
              'rwx') octal_value=7; ;;
              '---') octal_value=0; ;;
        esac
}

function check_permissions {
        permissions=$1
        bad_perms=1
        no_change=0
        if [ $permissions == "-" ]; then
                bad_perms=0
                no_change=1
        elif (echo $permissions | grep "^[0-7]$"); then
                obj_perms=`echo $permissions`
                bad_perms=0
        elif (echo $permissions | grep "^[r\-][w\-][x\-]$"); then
                octal_permissions $permissions
                obj_perms=`echo $octal_value`
                bad_perms=0
        fi
}

function human_permissions {
        total_perms=0
        permissions=`echo $1 | sed 's/\-/\A/g'`
        echo $permissions
        case $permissions in
                rAA) human_permissions="Read Only" ;;
                rwA) human_permissions="Read and Write" ;;
                rAx) human_permissions="Read and Execute" ;;
                AwA) human_permissions="Write Only" ;;
                Awx) human_permissions="Write and Execute" ;;
                AAx) human_permissions="Execute Only" ;;
                rwx) human_permissions="Read, Write and Execute" ;;
                #*)     human_permissions="Unknown" ;;
        esac
}

function do_chmod {
        obj=$1
        echo ""
        echo "Valid Permissions are: RWX or an octal value, a dash (-) will
                                     leave the permission unchanged."
        echo ""
        bValid=0
        while [ $bValid -ne 1 ]; do
                read -p "New User Permissions  (currently $user_permissions): " -e perms
                check_permissions $perms
                if [ $bad_perms -eq 1 ]; then
                        echo "Invalid Permissions, please use rwx or octal value (0-7)!!"
                else
                        if [ $no_change -eq 1 ]; then
                                octal_permissions $user_permissions
                                obj_perms = `echo $octal_value`
                        fi
                        new_perms=`echo $obj_perms`
                        bValid=1
                fi
        done
        bValid=0
        while [ $bValid -ne 1 ]; do
                read -p "New Group Permissions  (currently $group_permissions):" -e perms
                check_permissions $perms
                if [ $bad_perms -eq 1 ]; then
                        echo "Invalid Permissions, please use rwx or octal value (0-7)!!"
                else
                        if [ $no_change -eq 1]; then
                                octal_permissions $group_permissions
                                obj_perms = `echo $octal_value`
                        fi
                        new_perms=`echo $obj_perms`
                        bValid=1
                fi
        done
        bValid=0
        while [ $bValid -ne 1 ]; do
                read -p "New Other Permissions  (currently $other_permissions): " -e perms
                check_permissions $perms
                if [ $bad_perms -eq 1 ]; then
                        echo "Invalid Permissions, please use rwx or octal value (0-7)!!"
                else
                        if [ $no_change -eq 1]; then
                                octal_permissions $other_permissions
                                obj_perms = `echo $octal_value`
                        fi
                        new_perms=`echo $obj_perms`
                        bValid=1
                fi
        done

        chmod -R $new_perms "$obj"
        echo "New File Data:"
        ls -ld "$obj"
        echo ""
}

function do_lsch {
        obj=$1
        if [ ! -e "$obj" ]; then
                echo "Specified file or folder could not be found.";
                exit 1;
        fi

        if [ -d "$obj" ]; then
                obj_type="Directory"
        else
                obj_type="File"
        fi

        user=`ls -ld "$obj" | cut -d " " -f 3`
        group=`ls -ld "$obj" | cut -d " " -f 4`
        permissions=`ls -ld "$obj" | cut -d " " -f 1`
        user_permissions=`echo $permissions | cut -b 2-4`
        human_permissions $user_permissions
        user_hpermissions=$human_permissions
        group_permissions=`echo $permissions | cut -b 5-7`
        human_permissions $group_permissions
        group_hpermissions=$human_permissions
        other_permissions=`echo $permissions | cut -b 8-10`
        human_permissions $other_permissions
        other_hpermissions=$human_permissions
        modification_date=`ls -ld --time-style="+%B %d, %Y at %l:%M%P" "$obj" | cut -d " " -f 6,7,8,9,10,11`

        if [ -d "$obj" ]; then
                size="N/A"
        else
                size=`ls -l hello | cut -d " " -f 5`
                size=`echo $size bytes`
        fi

        echo "$obj_type: $obj"
        echo "User: $user"
        echo "Group: $group"
        echo "Size: $size"
        echo "Permissions: User: $user_hpermissions"
        echo "            Group: $group_hpermissions"
        echo "            Other: $other_hpermissions"
        echo "Modification Date: $modification_date"

        bValid=0
        while [ $bValid -eq 0 ]; do
                if [ -d "$obj" ]; then
                        echo "WARNING: If you modify permissions of this folder you modify it for ALL contents!!!"
                fi
                read -p "Would you like to modify the permissions of this $obj_type? (Y/N): " -e uResponse
                if [[ $uResponse == "Y" ||  $uResponse == "y" ]]; then
                        do_chmod $obj
                        bValid=1
                elif [[ $uResponse == "N" || $uResponse == "n" ]]; then
                        bValid=1
                else
                        echo "Invalid eentry $uResponse, must by (Y/N)"
                        bValid=0
                fi
        done
}

counter=0
counter_pointer=1
while [ $counter -lt $# ]; do
        obj=`eval echo \\$$counter_pointer`
        do_lsch "$obj"
        (( counter=counter+1 ))
        (( counter_pointer=counter_pointer+1 ))
done