我有其他目录的目录
$ ls
fish dog cow bird sheep
在每个文件夹中我有不同的文件
$ ls cat/
A11 A12 B11 B12 C11 C12 D11 D12
然后我查询每个目标FARM
,我得到一个列表,我解析,删除完整路径,只保留相关的根目录,awk
后cow sheep
land
,我想现在查看这些文件夹,看看$ grep -l "FARM" */A1* | awk -F/ '{print $1}' | xargs -0 -I {} grep "LAND" {}/B*2
上的那些文件夹。
cow
sheep
/B*2: File name too long
这不起作用,
{{1}}
答案 0 :(得分:1)
要使用find
,grep
和xargs
(在扩展程序为-print0
和-0
的系统上),您可以使用
find "$path" -type f -print0 | xargs -0 grep -e "$what_to_look_for" /dev/null
-print0
中的find
和-0
中的xargs
的使用强制使用NUL字符(文件名中不能存在)分隔符,因此带有空格,制表符甚至换行符的文件名也可以使用。 /dev/null
确保始终至少有两个参数传递给grep
,因此即使find
仅查找单个文件,它也会打印与匹配相对应的文件名;如果你保证总是有GNU查找,你可以取出/dev/null
并使用-H
来达到这个目的。
例如:
find . -print0 | xargs -0 grep -e FARM /dev/null
要使用纯POSIX查找(对于规范的2006版本或更高版本),您还可以通过使用xargs
-exec
参数来完全避免使用find
:
find . -exec grep -e FARM /dev/null '{}' +