在特定目录中的特定文件中使用find和grep

时间:2015-05-04 20:29:46

标签: linux unix grep find

我有以下目录结构:

./A1
./A2
./A3
./B
./C

在每个A *目录中我都有:

./A*/logs
./A*/test

在日志目录中我有:

./log-jan-1
./log-jan-2
./log-feb-1

如何在A目录中的所有1月份日志中grep一个字符串?

我尝试了这个,但它没有找到字符串,尽管它存在于日志文件中:

find . -type d -name 'A*' print | xargs -n1 -I PATH grep string - PATH/logs/log-jan*

我做错了什么?

2 个答案:

答案 0 :(得分:1)

为什么不简单地使用

grep string ./A*/logs/log-jan*

答案 1 :(得分:0)

如果不是拼写错误,则应使用-print(或-print0)代替打印。

但由于find + xargs + grep构造难以调试,因此您应该按顺序进行测试:

  • find . -type d -name 'A*' -print
  • find . -type d -name 'A*' -print0 | xargs -0 -n1 -I PATH echo grep string - PATH

最后:

find . -type d -name 'A*' -print0 | xargs -0 -n1 -I PATH grep string - PATH/logs/log-jan*

在您的使用案例中,-print-print0应该会得到相同的结果,但是因为-print被烧了,我总是在-print0之前使用xargs