Kentnotesの場合は、これをストレートgrep
で行うことはできません。それだけでは十分強力ではありません。方法はfind
を使用して検索するファイルを決定し、find
が生成するファイルリストをgrep
に渡します。
man find
を実行すると、の多くのオプションのマニュアルページが表示されます。これはfind
です。私たちがここに興味を持っているのは-maxdepth
です。
必要なコマンドを作成しましょう。それがどのように見えるかを確認するために、各段階でのコマンドを実行します。
find .
は、現在のフォルダ(.
)、または任意の子孫のフォルダに存在するすべてのファイルとフォルダの一覧が表示されます。
find . -maxdepth 1
現在のフォルダ内のすべてのファイルとフォルダを一覧表示します。 find . -maxdepth 2
は同様に、現在のフォルダ内のすべてのファイルとフォルダとその直下のサブフォルダを一覧表示します。その他...
フォルダも表示されています。 grep
はフォルダ自体を検索することができず、フォルダ内のファイルのみを検索することはできません。 -type f
を追加すると、リストされたファイルのみが取得されます。find . -maxdepth 2 -type f
。
ここで、検索するファイルがわかっているので、grep
を検索する必要があります。これを行うための標準的な方法はxargs
を使用している:
find . -maxdepth 2 -type f | xargs grep <text-to-search-for>
|
はそれがxarg
の「標準にfind
から「標準出力」、別名「標準出力」、(つまり、あなたは通常、画面に表示されるもの)とのパイプを取ります入力 "、別名" stdin "です。つまり、実行中のプログラムに入力した場合に通常どんなことが起こるのでしょうか。
xargs
は、stdinで受け取ったすべての引数を追加した後、あなたがそれを教えてくれた小さなプログラムです(ここではgrep <text-to-search-for>
)。その結果、grep
は、find
が見つけたすべてのファイルを検索します。
xargs
は、1つのファイル名の一部ではなく2つの異なるファイル名がスペースで区切られていると考えているため、ファイル名の一部にスペースが含まれていると、これは機能しません。これを処理する方法はたくさんあります(理想的には、ファイル名にスペースを入れないことです)、共通のものは、より魅力的な機能の1つを使用することです。find
。
find
に引数-exec
を追加すると、指定したすべてが;
または+
まで実行されます。 {}
(それはリテラル文字{
と}
です)を追加すると、すべてのファイルのリストに置き換えられます。 find
はこれを実行しているので、ファイル名のスペースがファイル名に含まれるはずです。したがって
あなたがしようとしているものを行うための最善の方法は、このようです:
は
find . -type f -maxdepth 2 -exec grep <text-to-search-for> {} +
(+
と;
で終わるとの違いはここに違いはありませんあなたが興味を持っている場合、それはman find
にだが、。短いバージョンは+
が速いということですが、コマンドには{}
という文字が1つしかないことを意味します)。
find/path/to/find -name "nameofthefile"または各ファイルをcatにしたい文字列を確認しますか? –