ディレクトリ内のすべての要素を繰り返しグループ化するには、所有者に同じ権限を設定する必要があります。
答え1
かなり単純な答えがあります(すべてのバージョンの* nixで動作するかどうかはわかりませんが)。
chmod g=u *
つまり、設定Gグループ権限は次のとおりです。あなたサービス権限。
この内容は次のように記録されます。修正(1):
シンボルパターンの形式は[
ugoa
...][[+-=
][パーマ...]...]、どこパーマセットにゼロ個以上の文字があります。rwxXst
、またはセットの単一文字ugo
。 …︙
これらの手紙
rwxXst
選ぶ… 。 1 つの文字しか指定できませんが、1 つ以上は指定できません。ugo
:ファイルを所有しているユーザーに権限を付与します(u
)、ファイルグループ(g
)、上記の2つのカテゴリに属していないユーザーに権限を付与します(o
)。
答え2
(最近sed
)-z
GNUシステムでは、次のことができます。
find . ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
echo
(結果が満足な場合は削除してください。)
特殊ビットではなくr
、、w
ビットのみ処理することに注意してください。x
再帰的にしたくない場合:
find . -mindepth 1 -maxdepth 1 ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
答え3
この試み:
for file in $(find .); do
perm=$(stat -c "%a" ${file});
echo chmod ${perm:0:1}${perm:0:1}${perm:2:1} ${file};
done
削除することを忘れないでくださいecho
。
拡張バージョン:
find . -exec sh -c 'for file do
perm=$(stat -Lc "%a" "$file")
echo chmod "${perm:0:1}${perm:0:1}${perm:2:1}" "$file"
done' sh {} +
のようにStefan Chazerasの答え、
- 使用
-mindepth 1
時の処理は避けてください.
。 -maxdepth 1
(サブディレクトリへ)再帰を防ぐために使用されます。! -type l
シンボリックリンク処理を回避するために使用されます(この回答はシンボリックリンクを正常に処理しますが).
このコマンドは、親モードビット(setuid、setgid、およびSticky)が設定されているファイルでは正しく機能しません。