vol*_*ron 2 linux grep bash find xargs
我历史上做过类似的事情:
find . 2>/dev/null | xargs grep -i something_to_find 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
如果 mypwd是 barfoo ( /foo/bar/baz/foofoo/foobar/foobaz/barfoo),它会找到匹配项。但是,如果我cdto /foo,它不再找到匹配项。
状况:
所以我很好奇是否有-maxdepth适用于查找的默认值,或者是否有其他限制来说明为什么这不起作用?
已经发布了一些很棒的评论。以下是一些附加信息:
find --version : GNU 查找版本 4.2.27grep --version :(GNU grep)2.5.1xargs --version : GNU xargs 版本 4.2.27barfoo(已知有效)中文件的路径没有空格,但是其他目录中的文件/foo/bar可能有空格;不过,我不明白这会有什么问题第一个不起作用,但第二个起作用:
find . -type f | xargs grep -i something_to_findfind . -type f -name "*.ext" | xargs grep -i something_to_find更奇怪的是这-name "*.*"不起作用,必须给出文件扩展名;这在搜索某些东西时可能会出现问题。
我想知道在最大错误计数或最大缓冲区大小之后是否终止。我知道这些目录中有很多文件,但它在指定文件类型(限制结果)时起作用的事实很有趣。
小智 7
名称包含空格的目录,可见 from/foo/bar和不 from barfoo,可能是罪魁祸首。xargs用空格分割其输出,并解释引号、反斜杠,甚至_字符——详细信息请参见手册,因此文件名或目录名中的空格会导致它将不完整的文件名传递给grep.
要解决此问题,请find -print0与 结合使用xargs -0,如下所示:
find . -print0 2>/dev/null | xargs -0 grep -i something_to_find 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
该-print0选项告诉find用二进制 0 字符分隔文件名,该字符不能出现在有效的文件名中。相应的-0选项告诉 part 使用与分隔符相同的字符,并且不解释引号和反斜杠。
| 归档时间: |
|
| 查看次数: |
3138 次 |
| 最近记录: |