我使用这一行在我所在目录及其所有子目录的文件中查找短语“B206”。
find . -exec grep -s "B206" '{}' \; -print
当它尝试读取某些文件并实际上将 putty 中的标题栏更改为一堆奇怪的字符时,它会崩溃
例如,当它遇到子目录中的 jpg 文件时,它总是崩溃。标题栏发生变化,屏幕中出现:
ÐF»*rkNQeË+Z׳kU£~MÞçÄZ½ªéúýØâÑn¡[U+Þ4ªÒ9/ê£<ú¯4}[IÓîÃ¥K»G%ݳ¢
迫使我按 Ctrl+C 返回提示符,然后退出。
有什么方法可以将代码添加到此行以排除 jpg 文件吗?更好的是,我可以在其中添加要排除的扩展列表的一段代码?
EDIT:
-not & -I do not work for me
I found this
similar question https://stackoverflow.com/questions/221921/grep-exclude-include-syntax-do-not-grep-through-certain-files also related somewhat to mine
没有理由使用find
: grep
带有递归选项,-r
。要获取匹配的文件名列表(而不是所有文件中所有匹配行的列表),您可以使用-l
选项。如果你想完全忽略所有二进制文件,你可以使用--binary-files=without-match
选项。如果您只想忽略具有特定扩展名的文件,可以使用--exclude
选项,例如--exclude=*.{jpg,jpeg}
忽略所有以以下结尾的文件.jpg
or .jpeg
。因此,您应该能够通过以下方式获得您想要的东西:
grep -r -l --binary-files=without-match .
现在,您在评论中提到您的版本grep
没有-r
or -l
选项。不幸的是,我建议获取更新版本grep
(最好是 GNU 变种)。
进一步说明:如果您使用find -exec
,你应该使用+
结束命令而不是分号,例如:
find . -exec grep options '{}' '+'
通过使用+
, find
只会分叉一个进程,并将所有匹配的文件名作为命令行参数传递给一个实例grep
。只要您没有一百万个匹配文件(这将创建一个远远超出 shell 处理能力的命令行),这将会快得多。如果您使用分号代替,find
fork 一个新进程each匹配文件,对于大量文件来说这确实很慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)