Compare permissions script

22 Comments

Recently I needed to compare some permissions between two directories, I wrote this script that could be useful for someone else:

#!/bin/bash
# This script will go through a list of files and directories and match their
# permissions against another directory, it can also copy the permissions from
# the first directory.
#
# Written by Pablo Fernandez
#

function showusage()
{
        echo "USAGE: $0 OPTS DIR1 DIR2"
        echo
        echo "OPTIONS:"
        echo "-a Apply changes (update permissions of DIR2"
        echo "-w Warning on missing files"
        echo "-q Quiet mode"
        echo "-h Show this help"
        echo "The directory DIR1 will be matched against DIR2. The directory DIR2 will"
        echo "be corrected with all permission differences."
}

apply_changes=""

while [ ! -z "$1" ]; do
        case "$1" in
                -a)
                        apply_changes=1
                        ;;
                -w)
                        warn_on_missing=1
                        ;;
                -q)
                        quiet=1
                        ;;
                -h)
                        showusage
                        exit 0
                        ;;
                *)
                        if [ -z "$orig" ]; then
                                orig=$1
                        elif [ -z "$targ" ]; then
                                targ=$1
                        else
                                echo "Unknown flag $1"
                                showusage
                                exit 1
                        fi
        esac
        shift
done

if [ -z "$orig" -o -z "$targ" ]; then
        showusage
        exit 1
fi

# Change into the directory and get a list of files and dirs
pushd . >/dev/null
cd $orig
list=`find .`
popd >/dev/null

# Go through the list
for i in $list; do
        # Get the permissions of the orig file and targ file
        p=`stat -c %a $orig/$i`
        p1=`stat -c %a $targ/$i 2>/dev/null`

        [ "$quiet" = "" ] && echo -n "$i: "

        if [ "$p1" = "" ]; then
                # No permissions for targ file, targ file doesn't exist
                [ "$quiet" = "" ] && echo "not present"

                if [ "$warn_on_missing" != "" -a "$quiet" != "" ]; then
                        echo "$targ/$i not present"
                fi
        else
                # Permission for targ file, compare
                if [ "$p" != "$p1" ]; then
                        # Permissions are different going to try to set permissions
                        if [ "$apply_changes" != "" ]; then
                                # Set permissions
                                e=`chmod $p $targ/$i 2>&1 >/dev/null`

                                if [ "$?" != "0" ]; then
                                        [ "$quiet" = "" ] && echo "different permission, change to $p failed, $e"
                                        [ "$quiet" != "" ] && echo "$e"
                                else
                                        [ "$quiet" = "" ] && echo "set to $p"
                                fi
                        else
                                # Running just for report
                                [ "$quiet" = "" ] && echo "different, orig is $p targ is $p1"
                                [ "$quiet" != "" ] && echo "Permission of $targ/$i is different than $orig/$i"
                        fi
                else
                        [ "$quiet" = "" ] && echo "Ok"
                fi
        fi
done

22 Comments (+add yours?)

  1. lvltfxu
    May 06, 2011 @ 01:29:44

    pSbXIG tooerovxkajg

  2. euswwzptv
    May 07, 2011 @ 09:30:19

    wiYWZ2 , [url=http://abujkezpyquw.com/]abujkezpyquw[/url], [link=http://mkcdqsqyfkje.com/]mkcdqsqyfkje[/link], http://baveddazqncy.com/

  3. PowellAurora34
    Aug 28, 2011 @ 00:22:54

    Following my monitoring, millions of persons all over the world get the loan at well known banks. Thus, there is good chances to receive a credit loan in all countries.

  4. skrypty
    Dec 02, 2011 @ 08:10:49

    There is noticeably a bundle to find out about this. I assume you made certain good factors in options also.

Leave a Reply

*