web-dev-qa-db-ja.com

同じ名前のすべてのディレクトリ内のサブディレクトリを見つける

次のコマンドを実行したい:

  1. inc」フォルダの下にある「X」という名前のすべてのディレクトリを検索します。
  2. 各「X/.../inc/」の下にすべてのサブディレクトリをリストします。
  3. 出力を「list」という名前のファイルにリダイレクトします

以下のコマンドのさまざまな組み合わせを試しましたが、成功しませんでした。

$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression

これどうやってするの?

8
iammilind

findは、これだけですべてを実行できます。

find X -path '*/inc/*' -type d > list

読む -path 一部の man find詳細については。

コメントですぐに述べたように、ディレクトリ行をテキストファイルに分けて保存すると、改行を含むディレクトリ名は明確に表現できなくなります。 certainディレクトリに改行が含まれていない場合は、問題ありません。ただの一般的な意見。

13

ここに便利なワンライナーがあります:

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

次に、コマンドのstdoutlistにリダイレクトします。

4
slhck

これを試して:

   find path-of-x -path '*/inc/*' -type d > list
1

さて、私はこのネストされた検索をシミュレートするための答えを見つけました:

find X/ -type d | grep "/inc/" > list
1
iammilind