この問題に対する解決策は数週間私を悩ませました。 -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
。)