グループ権限を所有者権限に設定

グループ権限を所有者権限に設定

ディレクトリ内のすべての要素を繰り返しグループ化するには、所有者に同じ権限を設定する必要があります。

答え1

かなり単純な答えがあります(すべてのバージョンの* nixで動作するかどうかはわかりませんが)。

chmod g=u *

つまり、設定Gグループ権限は次のとおりです。あなたサービス権限。

この内容は次のように記録されます。修正(1):

シンボルパターンの形式は[ugoa...][[+-=][パーマ...]...]、どこパーマセットにゼロ個以上の文字があります。rwxXst、またはセットの単一文字ugo。 …

                ︙

これらの手紙rwxXst選ぶ… 。 1 つの文字しか指定できませんが、1 つ以上は指定できません。ugo:ファイルを所有しているユーザーに権限を付与します(u)、ファイルグループ(g)、上記の2つのカテゴリに属していないユーザーに権限を付与します(o)。

答え2

(最近sed-zGNUシステムでは、次のことができます。

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)が設定されているファイルでは正しく機能しません。

関連情報