2016-08-12 2 views
0

私はnothing.Whyを得たgrep -r -e filenameを使用して "filename"という名前のファイルを検索しないのはなぜですか?

grep -r -e "k1.sh" /home/milenko/SerradoMel/MT06 

をしようとすると、私は

ADU-07 WebInterface-JobTable_files 
ADU-07 WebInterface-JobTable.html 
ADU-07 WebInterface-SelfTestResults_files 
ADU-07 WebInterface-SelfTestResults.html 
meas_2016-07-13_20-22-00 
meas_2016-07-13_20-25-13 
meas_2016-07-13_20-29-43 
meas_2016-07-13_20-33-43 
meas_2016-07-13_20-37-43 
meas_2016-07-13_20-54-43 
meas_2016-07-13_21-46-43 

私のディレクトリのすべてのフォルダに、k1.shを検索したいですか?私のgrepが-rオプションをサポートしているかどうかをチェックする方法?

+0

を私があればと思います'-e'を使って式を指定すると、' -f'を使ってファイルを指定する必要があります。私は一般的にどちらのスイッチも使用しません。 'grep -r" k1.sh "/ home/milenko/...'を試してください。 –

+0

'-r'をサポートしていなければ、エラーを投げています。 'grep'の出力に、明示的に渡されたファイル名の1つを追加して、そのファイル内の内容と一致することを示しますか? –

+0

@JuanTomas、...いいえ、 '-e'と' -r'は提案された方法で衝突しません。 –

答えて

2

grepは、ファイルの名前ではなくファイルの内容をチェックします。あなたはそうのようにこれをテストすることができます。

mkdir -p foo.d 
echo "non-matching" >foo.d/k1.sh 
echo "k1.sh"  >foo.d/matching 
grep -r -e k1.sh foo.d 
rm -rf -- foo.d 

上記の出力は次のとおりです。

foo.d/matching:k1.sh 

... foo.d/matchingがマッチしたファイル名で、k1.shコンテンツです。

k1.shという名前のファイル(ただし内容はnon-matchingです)は認識されませんが、代わりにmatchingというファイルが識別されます。 grepの文書化された目的は、ファイルの名前ではなくファイルの内容を見ることであるからです。

代わり

k1.shという名前のファイルを見つけるために、使用:

find /home/milenko/SerradoMel/MT06 -type f -name k1.sh 
1

質問:あなたはk1.shという名前のすべてのファイルを検索しますか、またはあなたは、文字列を検索したいですすべてのファイルの中にk1.sh?

回答:@PauloScardine k1.shという名前のすべてのファイルは、findで試行されます。

次に、grepは仕事の間違った人です。 grepコマンドは、そのパス内のすべてのファイル内の文字列「k1.sh」を探します - あなたはあなたの代わりにfindコマンドを探している「k1.sh」という名前のファイルをすべて検索する場合:

find /home/milenko/SerradoMel/MT06 -name k1.sh 
関連する問題