web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルに対してgrep操作を実行する方法

Xenserverを使って、ディレクトリ内の各ファイルに対してコマンドを実行し、コマンドの出力からいくつかのものを取り除き、それをファイルに追加します。

使いたいコマンドと、必要に応じて文字列を表示する方法が明確になっています。

しかし、私が明確にしていないのは、各ファイルに対してこのコマンドをどのように実行させるかです。ファイルが見つからなくなるまで、次に進みます。

167
user2147075

grep $PATTERN *で十分でしょう。デフォルトでは、grepはすべてのサブディレクトリをスキップします。しかしながら、もしあなたがそれらを調べたいのなら、grep -r $PATTERN *が当てはまります。

183
umi

Linuxでは、通常このコマンドを使用して、ディレクトリ内の特定のテキストを再帰的にgrepします。

grep -rni "string" *

どこで、

r =再帰的、すなわち現在のディレクトリ内のサブディレクトリを検索する
n =行番号を標準出力に表示します
i =大文字と小文字を区別しない検索

116
Narain

検索を使用してください。真剣に、それはそれからそれがそれがどのファイルで動作しているか本当に見ることができるのでそれが最良の方法です:

find . -name "*.sql" -exec grep -H "slow" {} \;

-HはMac固有のもので、結果にファイル名が表示されます。

28
Rob

複数のコマンドを実行したい場合は、次のようにします。

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done
2
bryan