find出力を別のfind呼び出しにパイプする方法

find出力を別のfind呼び出しにパイプする方法

これが私がしたいことです。

find . -maxdepth 1 -type d -print0 | xargs -0 -P4 find -name 'war' -type d

null で終わるディレクトリ名のリストを作成し、このリストを xargs に渡そうとします。 xargsは、各ディレクトリ名に対して4つのプロセスプールを使用してfindを呼び出します。

私の質問は:パイプ検索コマンドから標準入力にどのようにアクセスしますか?それはまるで

find <STDIN> -name 'war' -type d

ベストアンサー1

Findは標準入力からパスを読み取ることができず、-他の多くのプログラムのように指定することはできません。

並行して実行するには、GNU Parallelを使用することをお勧めします。

find . -mindepth 1 -maxdepth 1 -type d -print0  | parallel -0 --jobs 4 \
    find {} -name "war" -type d

-mindepth 1最初の検索に追加された内容を確認してください。これを含めないと、現在のディレクトリ(.)もクエリ結果の1つに渡され、デュアル結果が得られます。

$ mkdir a b c d e
$ mkdir b/war c/war
$ find . -mindepth 1 -maxdepth 1 -type d -print0  | parallel -0 --jobs 4 \
    find {} -name "war" -type d
./b/war
./c/war
$ find . -maxdepth 1 -type d -print0  | parallel -0 --jobs 4 \
    find {} -name "war" -type d
./c/war
./b/war
./c/war
./b/war

おすすめ記事