我想在名称中包含“20121218”的文件中递归搜索“MY:STRING”字符串,输出应该给我文件名和位置。搜索也应该在子目录下的文件中查找。
3 回答
使用find
和grep
:
find . -type f -name '*20121218*' -exec fgrep -l "MY:STRING" {} \;
解释:
find
命令查找。
.
开始在当前目录中查找。
-type f
只对文件感兴趣。
-name
文件名匹配'*20121218*'
-exec
对找到的文件执行以下命令。
fgrep
固定字符串 grep。
-l
仅打印包含匹配项的文件名。
{}
来自find
命令的匹配文件列表。
\;
分隔符。
编辑:
$ find . -type f -mtime -18
使用递归grep
,如下所示。没有必要find
。
grep -Flr --include="*20121218*" "MY:STRING" /path/to/dir
由于您正在搜索固定字符串而不是正则表达式,因此请使用该-F
选项来加快速度。
我更喜欢使用:
寻找 。-type f (-name ' 20121218 ') -print0 | xargs -0 grep --color -n MYSTRING
...它将向您显示 MYSTRING 位于包含 20121218 的文件中的所有文件路径、名称和行号(带颜色)。
前任。来自我的 Android 内核来源:
寻找 。-type f (-name ' config ') -print0 | xargs -0 grep --color -n MSM8974
返回很多,但这里有一些:
./arch/arm/mach-msm/Kconfig:254:config ARCH_MSM8974
./arch/arm/mach-msm/Kconfig:255: 布尔“MSM8974”
./arch/arm/configs/g2-kddi-perf_defconfig:41:CONFIG_ARCH_MSM8974=y
./arch/arm/configs/g2-kddi-perf_defconfig:44:CONFIG_MACH_MSM8974_G2_KDDI=y
./arch/arm/configs/lgl22_defconfig:314:CONFIG_ARCH_MSM8974=y
./arch/arm/configs/g2-open_com-perf_defconfig:503:CONFIG_MACH_MSM8974_A1=y
./arch/arm/configs/g2-open_com-perf_defconfig:516:CONFIG_SND_SOC_MSM8974=y