|
我们知道用下面这个命令,我们可以查出 所有 包含 "WINDOWS XP" 字符串的文件
find / -type f -iregex ".*" | xargs egrep -li "WINDOWS XP"
但是(这是重点),对于包含空格的目录或者文件名,shell就会把文件路径分成几段发给egrep进行查询,得到结果肯定会有误。
举例说明:
有一目录/sda1,目录结构如下:
/sda1/boot.ini
/sda1/testfolder/boot.ini
/sda1/test folder/boot.ini
我们可以看到,有三个相同的文件boot.ini,这个文件中都包含"Windows XP",但是请注意
第三个文件所在的目录名/test folder/中间包含一个空格,
当我们执行这条命令:find /sda1 -type f -iregex ".*" | xargs egrep -li "WINDOWS XP"
我们只能得到两个文件: /sda1/boot.ini 和 /sda1/testfolder/boot.ini
为什么/sda1/test folder/boot.ini 文件没有被找出来呢?
因为/test folder/目录名中间有个空格,所以这个文件被切割成两部分,交给egrep处理。
也就是说egrep先在/sda1/test里找,结果是没有这个文件,
然后egrep再在folder/boot.ini里找,结果也是没有这个文件,
所以此文件(/sda1/test folder/boot.ini)自然不会被找出来。
我想知道如何才能通过命令找到这个文件?请各位高手赐教!谢谢!
补充:
有人告诉我可以用这条命令:
find /sda1 -type f -iregex ".*" -exec egrep -li "WINDOWS XP" {} \;
这样写虽然大部分情况下可行,但是也存在问题:
因为系统对传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。
错误信息通常是“参数列太长”或“参数列溢出”。
请看:http://www.linuxsir.cn/main/?q=node/137
请大家指教!谢谢! |
|