次のコマンドを実行したい:
inc
」フォルダの下にある「X
」という名前のすべてのディレクトリを検索します。X/.../inc/
」の下にすべてのサブディレクトリをリストします。list
」という名前のファイルにリダイレクトします以下のコマンドのさまざまな組み合わせを試しましたが、成功しませんでした。
$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression
これどうやってするの?
find
は、これだけですべてを実行できます。
find X -path '*/inc/*' -type d > list
読む -path
一部の man find
詳細については。
コメントですぐに述べたように、ディレクトリ行をテキストファイルに分けて保存すると、改行を含むディレクトリ名は明確に表現できなくなります。 certainディレクトリに改行が含まれていない場合は、問題ありません。ただの一般的な意見。
ここに便利なワンライナーがあります:
find X -type d -name "inc" -exec sh -c 'find {} -type d' \; > list
最初のfind
結果のそれぞれに対してfind
を実行します。 exec
オプションは、最小限のShellコマンドを使用することもできます。このコマンドでは、前述したように、{}
は、最初のfind
の各ディレクトリに置き換えられます。
2番目のfind
は、リクエストに応じて、inc
ディレクトリを含む最初の結果の「すべてのサブディレクトリを一覧表示」します。それ自体を出力に入れたくない場合は、2番目のfind
少なくとも深さ1の出力フォルダーにします。
find X -type d -name "inc" -exec sh -c 'find {} -mindepth 1 -type d' \; > list
次に、コマンドのstdout
をlist
にリダイレクトします。
これを試して:
find path-of-x -path '*/inc/*' -type d > list
さて、私はこのネストされた検索をシミュレートするための答えを見つけました:
find X/ -type d | grep "/inc/" > list