2つの連続したfindコマンドを接続することは可能ですか?

2つの連続したfindコマンドを接続することは可能ですか?

私が欲しい:

  • 大文字で始まるすべてのディレクトリを検索
  • 次に、このディレクトリ内で ".git"という名前のすべてのディレクトリを探します。

これはパフォーマンスを最適化するためのものです。私の解決策は、最初に検索範囲を特定のディレクトリに絞り込んだ後、その中で検索することでした。

まず私の考えはこうです。

find / -mindepth 1 -maxdepth 1 -name "[[:upper:]]*"

2番目の使用は次のとおりです。

find / -type d -name ".git" 2>/dev/null

今、私はそれらをどのように接続するのかわかりません。 2番目のアイテムはfind最初のアイテムの結果のみを検索したいと思いますfind

またはXY問題の場合は、速度を向上させるための提案を教えてください。

.gitマシンのすべてのディレクトリを見つける必要があります。ただし、ディレクトリは.git大文字で始まる最上位ディレクトリに配置する必要があります。

ベストアンサー1

findここでは、次を使用して式を使用したり、-mindepth/ GNUismを回避したりすることもできます-maxdepth

find / ! -path / ! -path '/[[:upper:]]*' -prune -o -name .git -type d -print

より一般的には、次のようにfind移植可能なコマンドをリンクできます。

find ... -exec sh -c '
  find "$@" ... -exec ... {\} ...' sh {} +

{}(これは、外部(最初の)クエリから選択されないように内部(2番目)のクエリに挿入する方法を示しています。

または、最新バージョンのGNU find(4.9.0以降)を使用してください。

find ... -print0 | find -files0-from - ...

おすすめ記事