11

これは、bash スクリプトを初めて試みた場合です。特定のディレクトリの下で始まるすべてのファイル所有者とグループをチェックするスクリプトを作成しようとしています。

たとえば、私がこれを持っている場合:

files=/*  
for f in $files; do  
    owner=$(stat -c %U $f)  
    if [ "$owner" != "someone"  ]; then  
        echo $f $owner  
    fi  
done

最終的な目標は、アクセス許可の問題を修正することです。ただし、/*変数を のすべての下に移動することはできません。/下のファイルのみをチェック/し、新しいディレクトリで停止します。/その下のすべてとそのサブディレクトリに対するアクセス許可を確認する方法についての指針はありますか?

4

3 に答える 3

29

bash4 +で再帰的に展開するためにshopt -s globstar使用するか、次を使用できます。for f in yourdir/**find

find yourdir ! -user someone

ユーザー名とファイル名で同じ出力形式が必要な場合は、システム固有のものを取得する必要があります。

GNU$  find yourdir ! -user someone -printf '%p %u\n' 
OSX$  find yourdir ! -user someone -exec stat -f '%N %Su' {} +
于 2013-02-06T00:20:02.767 に答える
8

あなたはこれを試すことができます、それは再帰的なものです:

function playFiles {
    files=$1
    for f in $files; do
            if [ ! -d $f ]; then
                    owner=$(stat -c %U $f)
                    echo "Simple FILE=$f  -- OWNER=$owner"
                    if [ "$owner" != "root"  ]; then
                            echo $f $owner
                    fi
            else
                    playFiles "$f/*"
            fi
    done
}
playFiles "/root/*"

playFiles "/root/ " を : playFiles "/ " に置き換える前に、別のディレクトリで少し遊んでください。ところで、playFiles は bash 関数です。うまくいけば、これはあなたを助けるでしょう.

于 2013-02-06T01:21:17.427 に答える