2017-10-06 7 views
-2

問題:私たちが求めている文字列を知っているが、中に見てどのファイルか分からない利用可能なすべてのコアでgrepを使用するにはどうすればよいですか?

例えば..

たちは以下のことを含むファイルを持っていると言います。私たちは、ファイル名がわからない(同じ「重要な注意」タグの付いた複数のファイルがあるかもしれない)と私たちは「重要な注意」

が含まれているすべてのファイルを検索したい

blah blah blah
.... IMPORTANT NOTE: very important note ..... blah blah blah blah

 

一つの解決策:

 find /directory/to/search/ -exec grep "IMPORTANT NOTE" {} /dev/null \;

私はファイル名を捕捉してそれを使ってスクリプトを作成できるので、これをスクリプトに使用します。

別ソリューション:

 grep -R "IMPORTANT NOTE" /directory/to/search/*

は、私は手動でファイルを探すためにこれを使用します。..

 私が理解からは、上記の一つのプロセスで実行され、単一のコアを使用しています。これを変更して、各ファイル検索を実行することができます 別のタスクとして、マシン上のすべての使用可能なコアを利用できますか? (forkbombのようなもの)私はあなたが&を使ってバックグラウンドでコマンドを実行できることを知っています、これは使えますか?もしそうなら、親シェルがコマンドの出力にハンドルを保持していることをどうやって確認するのですか?

1)fork bomb - サービスの簡単な拒否「攻撃」

重要な注意:これは完全にあなたのマシンをロックします。フォーク爆弾のため

構文(あなたが気にしない仮想マシンでそれを試してみる):

 :(){ : | :& }; :

+1

なぜあなたはすべてのコアを使いたいのですか? –

+0

私は、すべての処理能力を使って実行を高速化できるかどうかを確認したいだけです。 – hov

+1

本当に大きなシステムを持っていない限り、2-3インスタンス後にはメモリにバインドされ、おそらくはそれ以前のディスクにバインドされます。 – Surt

答えて

0

あなたは、これはすべてのファイルをカバーしていないノート

grep -R "IMPORTANT NOTE" /directory/to/search/[a-m]* & 
grep -R "IMPORTANT NOTE" /directory/to/search/[n-z]* & 

ような何かを行うことができます。

0

xargs -Pを使用すると、同時に実行されるインスタンスの数を制御し、他のインスタンスが停止するたびに新しいインスタンスを開始することができます。

find /directory/to/search/ -print0 \ 
| xargs -P 8 grep -n 1 -e "IMPORTANT NOTE" /dev/null 

これは、一般的に、これはCPUバインディングではなくI/Oになります。 CPUコアではなく、ディスク帯域幅の最大化について心配する必要があります。

関連する問題