结合查找命令条件

时间:2017-01-05 14:37:37

标签: linux unix find

我正在尝试将2个find命令组合到一个grep模式匹配管道。

我的3个命令是:

在过去24小时内修改了文件:

find '/logs' -mtime 0 -type f

忽略几个目录:

find -type d \( -path /dir -o -path /dir2 -o -path /dir3 \) -prune -o -print

在文件的行中找到模式:

grep -rnw -e "my pattern"

我已经开始工作,但似乎无法将目录跳过添加到混音中。

在过去24小时内修改文件,并在文件的行中找到模式:

find '/logs' -mtime 0 -type f | xargs grep -rnwI -e "my pattern"

理想情况下,我想结合在过去24小时内修改文件并忽略目录。

3 个答案:

答案 0 :(得分:1)

也许这种缓慢的解决方案可以解决您的问题:

find '/logs' -mtime 0 -type f | grep -v dir | grep -v dir2 | grep -v dir3| xargs grep -rnwI -e "my pattern"

答案 1 :(得分:1)

find '/logs' ! -path "*/dir1/*" ! -path "*/dir2/*" ! -path "*/dir3/* -mtime 0 -type f | xargs grep -rnwI -e "my pattern"

find '/logs' -mtime 0 -type f | egrep -v "dir1|dir2|dir3" | xargs grep -rnwI -e "my pattern"

答案 2 :(得分:1)

可能根本不使用find而是使用grep的递归功能以及--exclude-dir选项(或者可能是--exclude-from选项,请参阅man grep了解详细信息)。

grep -r --exclude-dir=dir1 --exclude-dir=dir2 --exclude-dir=dir3 -nwI -e "my pattern" /logs*