Linuxのディレクトリのコンテンツ全体で単語を検索する方法


15

コンテンツ全体で何かを検索する必要がある

やっています:

find . | xargs grep word

エラーが発生します:

xargs:終了していない引用

これを達成する方法は?

回答:


15

xargs他のコマンドが生成しない形式の入力を想定しているため、効果的に使用することは困難です。ここで間違っているのは、入力時に名前を引用する必要があるファイルがあることですxargs(おそらくを含む')。

grep が再帰検索の-ror -Rオプションをサポートしている場合は、それを使用します。

grep -r word .

それ以外の場合は、の-execプライマリを使用しfindます。これは、xargsファイル名に制約がないことを除いて、と同じ効果を達成する通常の方法です。比較的最近のバージョンではfind、補助コマンドの1回の呼び出しで複数のファイルをグループ化できます。を渡す/dev/nullgrep、たまたま単一のファイルで呼び出された場合でも、各一致の前にファイル名が表示されます。

find . -type f -exec grep word /dev/null {} +

旧バージョンfind(旧システムまたはOpenBSD、またはBusyBoxなどの縮小ユーティリティ)は、一度に1つのファイルでのみ補助コマンドを呼び出すことができます。

find . -type f -exec grep word /dev/null {} \;

いくつかのバージョンfindとは、xargs彼らが何の引用が必要とされないように、別のファイル名にヌル文字を使用して、正しく通信でき拡張子を持っています。最近では、OpenBSDのみが、この機能を備えてい-exec … {} +ます。

find . -type f -print0 | xargs -0 grep word /dev/null

特に+1 /dev/null。一致するファイルの数に応じて、出力形式が異なる場合は厄介です...ありがとう。
Peter.O

12

私はあなたが最初のオプションを意味すると思います

ファイル内のコンテンツを検索するためのgrep再帰的

grep -R "content_to_search" /path/to/directory

ls再帰、一致するファイルの検索用

ls -lR | grep "your_search"

grep -rin for recursive-case_insensitive-show_line_number

各ファイルのコンテンツを検索できるようにしたい。

最初のものは、ファイル内のオカレンスを返し、オカレンスが見つかったファイルを指定します

2

GNUツールがある場合(Linuxタグが正確な場合に使用-print0します)-0、通常の引用の問題を回避するために使用できます。

find . -type f -print0 | xargs -0 grep word

0

そこにはまた、ACK、のような特別なディレクトリをスキップするように設計されています.svn.gitそして、そのような。開発者向けの日常的なツールです。

一般的なスイッチのかなり近いです。

例 :

ack -r string .

ack-grepdebianおよびdebian likesのパッケージ。



-1

ファイルで文字列を見つけたいと思う

試してみる find . -name "*" | xargs grep -l "string"


xargsからのエラーメッセージ( "Unterminated quote")は、OPにファイルがあることを意味します。名前に引用符が含まれています。あなたのラインも同様にそれをみます。上記のmuと同様に、別の終端が必要です。
チトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.