サブディレクトリを参照せずに、ディレクトリ内の誰でも書き込み可能なファイルを一覧表示するために find コマンドを使用するにはどうすればよいですか?

サブディレクトリを参照せずに、ディレクトリ内の誰でも書き込み可能なファイルを一覧表示するために find コマンドを使用するにはどうすればよいですか?

この問題に対する解決策は数​​週間私を悩ませました。 -prune.

いろいろなオプションを試してみましたが、結局

find / -type f -perm -2

ただし、これはまだサブディレクトリに移動します。コマンドの使用

find / -prune -type f -perm -2

やはり結果がなかった。私はどこで間違っていますか?

答え1

以下を試してくださいmaxdepth N

-最大深さレベル
始点を下回るほとんどのレベル(非負の整数)ディレクトリレベル。 -maxlength 0 は、始点自体にのみテストと操作を適用することを意味します。

find $FOLDER -maxdepth 1 -perm -2

答え2

find / -type f -perm -2

これは再帰的です。それだけですfind

find / -prune -type f -perm -2

ここではfind、アプリケーションに-prune見つかったすべてに適用するように指示します。条件と操作は左から右に処理されます。以前の条件がないため、-prune条件は適用されません。したがって、最初に見つかったものfind(つまり、コマンドライン引数/)が-pruneここに適用されるため、findディレクトリの内容は検索されません。/次の条件が満たされていないため印刷されません。

最上位ディレクトリのエントリのみを処理するには、その-pruneディレクトリに適用する必要があります。コマンドラインパラメータに加えて。これを行う移植可能な方法は、/.コマンドラインに渡されたパスの末尾にを使用することです。これにより、find名前が処理され、一致するために.使用できます。-name .再帰パトロールでは.名前が保存されるため、ファイルは呼び出されません。今、3つの状況があります。

  • トップレベルディレクトリ:再帰的。
  • 他のディレクトリ:再帰はありません。
  • 世界書き込み可能一般ファイル:印刷。

さまざまな動作を指定するには、-o("or")演算子を使用してください。最初の条件に一致するすべての条件が適用されます。

find /. -name . -o -type d -prune -o -type f -perm -2 -print

一部のバージョンではfind書き込むことができますが、find / -name / -o -type d -prune -o …一部のバージョンではそうではありません(BusyBoxなど)。

一部のバージョンはfindオプションをサポート-mindepthし、-maxdepth再帰巡回を制限します。調査結果がこれを裏付ける場合は、代わりに使用できます-prune

find / -mindepth 1 -maxdepth 1 -type f -perm -2

-mindepthおよび-maxdepthはグローバルオプションであり、条件と作業部分は-type f -perm -2暗黙的に続きます-print。)

関連情報