find コマンド: '-minlength' オプションが '-prune' 操作と競合します。

find コマンド: '-minlength' オプションが '-prune' 操作と競合します。

ファイル構造が次の場合:

/a/p/c/d...
/c/a/c/g/f/...
/a/c/d/e/...
...

私はこれをしたい:

find -mindepth 3 -type d -name p -prune -or -name c -print

ただし、このコマンドは "p"ディレクトリを削除せず、最初の行が含まれています。私はこれが実際に衝突ではないことを知っています。しかし、最小深さを適用した状態で「p」を切り取る方法は?

ベストアンサー1

FreeBSDとGNU find(サポートされている数少ない実装の1つ-mindepth)の場合は、3つ以上の深さのディレクトリのみ-pruneを削除します。pFreeBSDとGNUfindドキュメントの両方が非常に明確に説明されています(ここにGNUドキュメントがあります):

-- Option: -mindepth levels
    Do not apply any tests or actions at levels less than LEVELS (a
    non-negative integer).  `-mindepth 1' means process all files
    except the command line arguments.

いつでも標準的な方法で実行できます。

find . -type d -name p -prune -o -path './*/*/*' -name c -print

-mindepthそして-or標準述部でもなく、findディレクトリを省略するわけでもありません)。

または以下を使用してzsh

setopt extendedglob
printf '%s\n' ^p/^p/(^p/)#c

おすすめ記事