2016-08-12 63 views
0

我要搜索k1.sh,在我的目錄爲什麼不使用grep -r -e filename找到名爲「filename」的文件?

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 

的所有文件夾,當我嘗試

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

我nothing.Why?如何檢查我的grep是否支持-r選項?

+0

我想,如果你使用'-e'來指定表達式,那麼你必須使用'-f'來指定文件。我通常不使用任何一個開關。試試'grep -r「k1.sh」/ home/milenko/...' –

+0

如果它不支持'-r',它會拋出一個錯誤。你可以添加一個'grep'的輸出,其中一個文件名顯式地傳遞* *表示它匹配該文件中的內容? –

+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」 - 如果你想找到一個名爲「k1.sh」的所有文件,你正在尋找的find命令:

find /home/milenko/SerradoMel/MT06 -name k1.sh 
相關問題