2017-01-05 6 views
0

Я пытаюсь объединить 2 команды find для соединения с контуром grep pattern.Объединение условий команды поиска

мои 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 часов и игнорирование каталогов.

+0

try find '/ logs' -mtime 0-type f | grep -v DIRTOEXCLUDE | xargs grep -rnwI -e «my pattern» –

ответ

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" 
+0

Мне нравится, что egrep немного чище – BluGeni

+0

Использование egrep устарело в POSIX, используйте 'grep -E' из' man grep'' Кроме того, три варианта программ egrep, fgrep и Доступны rgrep. egrep совпадает с grep -E. fgrep совпадает с grep -F. rgrep совпадает с grep -r. Прямое обращение как egrep или fgrep устарело, , но предоставляется, чтобы исторические приложения полагались на них, чтобы запускать unmodified.' – Cwissy

1

Может быть, это медленное решение может решить вашу проблему:

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

возможно не использовать найти на всех, но рекурсивные способности Grep вместе с --exclude-каталог вариант (или, может быть, опция -exclude-from см. man grep).

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

hmm Я не думал об этом, я попробую и посмотрю, быстрее ли это. – BluGeni