書き込み権限がない特定のフォルダ内のすべてのファイルをどのように見つけることができますか?

書き込み権限がない特定のフォルダ内のすべてのファイルをどのように見つけることができますか?

書き込めないファイルをすべて見つける方法は?

標準権限とACLを考慮すると良いでしょう。

「簡単」な方法はありますか?または、権限を直接解析する必要がありますか?

答え1

努力する

find . ! -writable

このコマンドはfindファイルのリストを返し、書き込み-writable権限を持つファイルのみをフィルタリングしてから!フィルタを元に戻します。

-type fディレクトリやその他の「特殊ファイル」を無視するには、追加できます。

答え2

Linux以外のシステムとGNUを持たないシステムでは、以下はfind同じ出力を提供できますが、find . -type f ! -writableセカンダリグループは考慮しません。

myname=$( id -un )
mygroup=$( id -gn )

find . -type f '(' \
       '('   -user "$myname"                     ! -perm -u=w ')' -o \
       '(' ! -user "$myname"   -group "$mygroup" ! -perm -g=w ')' -o \
       '(' ! -user "$myname" ! -group "$mygroup" ! -perm -o=w ')' ')'

4つのテストを順番に実行します。

  1. 一般的なファイルですか?
  2. 私が所有しているが書き込み権限を持たないファイルですか?
  3. 私の所有ではありませんが、私のグループに属し、グループへの書き込み権限を持たないファイルですか?
  4. 私が所有していないファイルで、私のグループの一部ではなく、一般(「その他」)書き込み権限を持たないファイルですか?

これの利点は、他のユーザーの名前とグループを変更できることです。しかし、GNUではそうすることはできないと思いfindます-writable


同じコマンドですが、ロジックはAND形式で作成されます。

find . -type f \
    ! '('   -user "$myname"                     -perm -u=w ')' \
    ! '(' ! -user "$myname"   -group "$mygroup" -perm -g=w ')' \
    ! '(' ! -user "$myname" ! -group "$mygroup" -perm -o=w ')'

関連情報