有没有办法在find中的-exec中使用管道?我不希望grep遍历整个文件,只能通过每个文件的第一行。
find /path/to/dir -type f -print -exec grep yourstring {} \;
我试图用“cat”和“head -1”把管道放在那里,但是效果不好。我尝试以某种方式使用括号,但我没有设法弄清楚如何将它们放在那里。 我非常感谢你的帮助。我知道如何在不使用find的情况下以其他方式解决问题,但是我们尝试在学校使用find和pipeline来实现它,但是无法管理如何操作。
find /path/to/dir -type f -print -exec cat {} | head -1 | grep yourstring \;
这是我们如何尝试这样做,但无法管理括号,甚至可能。我试图通过网络查看,但找不到任何答案。
答案 0 :(得分:40)
为了能够使用管道,您需要执行 shell 命令,即带有管道的命令必须是-exec
的单个命令。
find /path/to/dir -type f -print -exec sh -c "cat {} | head -1 | grep yourstring" \;
请注意,以上是 Catless Use of Cat ,可以写成:
find /path/to/dir -type f -print -exec sh -c "head -1 {} | grep yourstring" \;
实现目标的另一种方法是:
find /path/to/dir -type f -print -exec awk 'NR==1 && /yourstring/' {} \;
答案 1 :(得分:2)
这并没有直接回答你的问题,但是如果你想做一些复杂的操作,你可能会更好地编写脚本:
for file in $(find /path/to/dir -type f); do echo ${file}; cat $file | head -1 | grep yourstring; done