2017-01-27 9 views
-1

複数の単語を含む(再帰的に)ディレクトリツリー内のすべてのファイルをリストする方法を見つけることを試みます。linux:複数の単語を含むファイルを一覧表示する

検索中に、egrep -R -l 'toto|tata' .などの例が見つかりましたが、 ORを誘発する。私は、

GNU grep GNU xargsで使用してあなたの助け

+0

'find。 -name '* toto *' -a -name '* tata *' '? – myaut

+0

@myaut:OPはファイルの内容にパターンが必要で、ファイル名ではないと思います/ – Inian

+0

ファイルに特定の順序で単語が含まれていなければなりませんか?あるいは言葉だけを含んでいますか?私は再帰的だとは思わないが、それを行うことができるスクリプトを持っている。それは変更することができます。 –

答えて

2

いただきありがとうございます...

grep -ERl 'toto' | xargs -r grep 'tata' 

最初grepリスト、その後xargsにとが供給されるパターンtotoを含む、それらのファイルを好きだろう2番目のgrepのファイルにはtataが含まれています。 -rフラグは、2番目のgrepが空の出力で実行されないようにすることです。

manページからxargs-rフラグは、

-r, --no-run-if-empty 
     If the standard input does not contain any nonblanks, do not run the command. 
     Normally, the command is run once even if there is no input. This option is a GNU 
     extension. 
+0

'grep'も' -l'を持ってはいけませんか? – myaut

+2

@myaut:それはOPのポストからはっきりとは分かりませんでしたが、必要ならば追加することができました! – Inian

+0

これは、ファイル名にスペースが含まれていない限り動作すると思います。 –

1

agrepツールを提供するために設計されており、使用にはgrepする:あなたのケースで

agrep 'pattern1;pattern2' file 

あなたは

find . -type f -exec agrep 'toto;tata' {} \; #apply -l to display the file names 
を実行することができます

PS1:cあなたはちょうどagrep 'pattern1;pattern2' *.*
PS2:unfortunatelly agrepは-Rオプションをサポートしていません。

+0

s /残念ながら/幸いにも/実際には 'agrep'はこれには役に立ちません。あなたはいつでも' awk '/ pattern1/&&/pattern2 /' 'を任意のUNIXシステム上で実行できるからです。 –

関連する問題