2011-10-19 11 views
1

ファイルを見つけてファイル名を変数に保存し、この変数を-execで使用していくつかの計算をしたいその次に、例えばのでbashスクリプト:コマンドの結果を変数に保存して-execで使用する方法

検索は、コマンドを見つけると同時に、何か他のものを生成するために、私は-execでそのファイル名を使用してファイル名を返すたびに、このファイルを見つけ

おかげ

+0

あなたのやりたいことを教えてください。これはあなたがそれを最も簡単な方法で取っていないと思います。 '-exec'を歌っても、それほど効率的ではありません。 – TMS

+0

こんにちはトーマス、私は各ファイル名を取って、内部の情報、例えば行、文章などの中の文字列を検索したいが、私は特定の名前を持つファイルを見つけるとすぐにこれをしたい。 – jonathan

答えて

0

ドンエグゼクティブ

find -whatever | 
while read filename; do 
    Whatever you did in -exec before "$filename" 
    Other thing "$filename" 
done 

ただし、特殊文字を含むファイル名では堅牢ではありません。

編集

find -whatever -exec sh -c 'whatever you did in -exec before {}; other thing {}' \; 

それとも、シェルスクリプトに出力をマングルすることができます:あなたはfindによって返されたヒットに複数のものをしたい場合は、これは同様find -execまたはxargsと確かに可能ですそしてshにそれを養う:

find -whatever -printf 'mv %p destdir; ln -s destdir/%f %h\n' | sh 

しかし、あなたが本当に、本当にアクションは、すぐとして起こるしたい場合はファイルについて学び、おそらく道のりは-execです。あなたが達成したいことを説明することはできますか?

findによって返されるヒットのリストを保持したい場合は、追加の作業を行うことができますfindが終了した後、最後の例のようにヒットを出力し、出力をファイルに格納するか、最初の例のように別のコマンドにパイプします。

0

「私は文章、ラインの例の文字列を、それぞれのファイル名を取り、情報のために内部検索したい」 - ジョナサンをOK、それはあなたが

回答:-)あなたの質問に述べているべきです。

find /dir -iname "*whatever*" | xargs grep 'text' 

は、ディレクトリ/ dirの下にあるすべてのファイル*whatever*内のテキスト "テキスト" を検索します。

+0

これは 'find -whatever -exec grep 'テキスト' {} \; 'を改善しますが、それでも私はまだその質問を理解しているとは感じません。 – tripleee

+0

@treepleee、あなたが書いたのは、コマンドラインのバーバリズムです:大量のファイルでは非常に遅くなるでしょう - それは別々にgrepを実行します!私の解決策では、grepはファイル全体のxargsによって実行されます。 – TMS

+0

私は同意しますが、私が作ろうとしている主な点は、「xargs」が主な質問に(どのように見えるのか)助けにならないことです。各ファイルに複数のことを行う方法。あなたは確かにシェル呼び出しをハックすることができますが、 'find -exec'でもそうすることができます。 – tripleee

関連する問題