2017-09-06 5 views
0

ここでは、ドキュメントは中間の1回限りの使用ファイルの作成を避けています。私は可能な20のファイルの完全なパスを得るときに(find -o構文を使わずに)これを利用したいと考えていました。私は仕事に次の予想:grep -f here hereのドキュメント

find | grep -f <<EOF 
Controller.java 
Main.java 
Config.java 
EOF 

を私は得る:私は、文書がどのように機能するかをここで

grep: option requires an argument -- f 

誤解だろうか?あるいは、grep -fはファイル記述子でうまく動作しませんか?

私はまた、findの値を持つ-nameの値を持つソリューションを公開していますが、-oを20回入力する必要はありません。


ベスト代替:あなたが大規模なディレクトリ階層のために十分に拡張しません各検索パターンに対して一度ファイル全体の階層にfindを実行しているので、

cat <<EOF | xargs --delimiter '\n' --max-args=1 -I% find -iname "*%*" 
Controller.java 
Main.java 
Config.java 
EOF 

これは知的に満足のいかないです。

+0

ありませんまったく同じですが、 'grep -f-'がgrepに標準のパターンリストを読み込ませるように指示しますか?次に、コマンド文字列にファイルのリストを与える必要があります。 – stevesliva

+0

ええと、それは関連していますが、 'grep'コマンドの標準であるために' find'コマンドの標準出力が必要なので、標準入力で渡すことはできません。 –

答えて

1

あなたは/ procの(例えばLinux)の持つシステムを使っているのであれば、試してみてください。

#!/bin/sh 

find . | grep -f /proc/self/fd/3 3<< EOF 
Controller.java 
Main.java 
Config.java 
EOF 

それとも、あなたのシェルは、プロセス置換をサポートしている場合は、(Bシェルにはない):

#!/bin/bash 

find . | grep -f <(cat << EOF 
Controller.java 
Main.java 
Config.java 
EOF 
) 
+0

第2の解決策は、私が最善の解決策と考えるものです。これはMac OS X( '/ proc'を持たない)で動作します。そして、プロセスの代用は素晴らしいので、Bourne Shell(私は、とにかく、対話的なコマンドラインの使い方ではなく、とにかくスクリプトを書くために使う)を自分自身に強要する価値がある。私は、毎日通過するプロセス置換の大きなファンになりつつあります。 –

関連する問題