我有兴趣在目录中递归地查找字符串以获取模式,然后将匹配的文件cp'ing到目标目录。我以为我可以做类似以下的事情,但是对于 linux 的 find 工具似乎没有意义:
find . -type f -exec grep -ilR "MY PATTERN" | xargs cp /dest/dir
有没有更好的方法来解决这个问题?或者一种甚至可行的方式将是一个坚实的开始。
我有兴趣在目录中递归地查找字符串以获取模式,然后将匹配的文件cp'ing到目标目录。我以为我可以做类似以下的事情,但是对于 linux 的 find 工具似乎没有意义:
find . -type f -exec grep -ilR "MY PATTERN" | xargs cp /dest/dir
有没有更好的方法来解决这个问题?或者一种甚至可行的方式将是一个坚实的开始。
做
man xargs
,看看-I
旗帜。此外,
find
需要一个\;
或+
在-exec
标志之后。xargs
读取其标准输入并将它们放在要执行的命令的末尾。正如你写的那样,你最终会执行这与您想要的相反。
您可以使用该
-I
选项为 指定占位符xargs
,如下所示:xargs -I '{}' cp '{}' /dest/dir
.此外,
find
负责递归,所以你grep
不需要-R
.最终解决方案:
我认为你不需要找到。递归 grep:
上面的例子都没有考虑到
grep
'-l
生成重复结果的可能性(文件名相同,但在不同的地方),因此find
'exec
的钩子会覆盖目标目录中的文件。尝试解决这个问题: