为什么不使用grep -r -e filename查找名为" filename"?的文件

时间:2016-08-12 17:03:46

标签: linux bash grep

我想在我的目录

的所有文件夹中搜索k1.sh
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
我什么都没得到。为什么?如何检查我的grep是否支持-r选项?

2 个答案:

答案 0 :(得分: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 :(得分:1)

  

问题:您要查找名为k1.sh的所有文件,还是要在所有文件中找到字符串k1.sh?

     

回答:@PauloScardine名为k1.sh的所有文件都将尝试使用find。

然后grep是错误的工作。 grep命令查找字符串" k1.sh"在该路径中的所有文件中 - 如果要查找名为" k1.sh"的所有文件。您正在寻找find命令:

find /home/milenko/SerradoMel/MT06 -name k1.sh