0** 権限を持つすべてのファイルとフォルダーを `検索` するにはどうすればよいですか?

0** 権限を持つすべてのファイルとフォルダーを `検索` するにはどうすればよいですか?

000 権限が設定されたファイルやフォルダが多数見つかったという奇妙な状況がありました。これは、次の方法で簡単に修復できました。

sudo find . -perm 000 -type f -exec chmod 664 {} \; 
sudo find . -perm 000 -type d -exec chmod 775 {} \;

残念ながら、044 などの奇妙な権限やその他の奇妙な設定によって、問題が少し複雑になっていることに突然気付きました。これらはあちこちに散らばっていて、予測できないことが判明しました。

0** などの権限や、その他の非常に制限された権限構成を検索する方法はありますか?

答え1

私は次のようなものを使います:

find . ! -perm -u=r ! -perm -u=w ! -perm -u=x -ls

または、8進表記を好む場合は次のようにします。

find . ! -perm -400 ! -perm -200 ! -perm -100 -ls

-perm残念ながら、それを 1 つの選択肢としてどのように取り入れるかはわかりません。

上記の構文は、をサポートしていないシステムでは同様の出力を得るために-lsに置き換えることができる部分 (共通だが POSIX ではない)を除いて標準です。-exec ls -disl {} +find-ls

答え2

GNUfind所有者に設定されているビットと一致しないファイルを探すことでこれを実行できます。

find . ! -perm /700

例えば、フリーBSDfind

find . ! -perm +700

これらは両方とも同じように動作します。-perm /700or は-perm +700、所有者の許可ビットのいずれかが設定されている場合と一致します。!これは否定されるため、! -perm /700orは! -perm +700、所有者の許可ビットがまったく設定されていない場合に一致します。その他のビットは無視されます。

答え3

sfindまたは を使用するプログラムを使用する場合libfind、または を使用する場合はBSD find、以下を使用できます。

find path -perm +0xxx

パターンに記述されたビットのいずれかが設定されているファイルを検索するには、

find . ! -perm +0700

あなたのケースではうまくいくはずです。ちなみに、これは によってもサポートされていますGNU find

これは、POSIX では言及されておらず、SVr4 ベースのでは実装されていない拡張機能であることに注意してくださいfind

関連情報