grep
имеет опцию --exclude-dir
, но не --include-dir
.Опция --include
позволяет вам соответствовать только имени файла, а не filepath
Если вы используете более новые версии оболочки bash
или других оболочек, поддерживающих extglob
, вы также можете сделать это:
$ shopt -s extglob
$ # mylogs without sub-dirs
$ ls **/mylogs/*.log
cat/dog/mylogs/anotherlog.log foo/bar/baz/mylogs/somelog.log
$ # if mylogs can have sub-dirs as well
$ ls **/mylogs/**/*.log
a/b/mylogs/c/d/f.log cat/dog/mylogs/anotherlog.log foo/bar/baz/mylogs/somelog.log
как только вы убедитесь, что файлы совпадают по необходимости, используйте grep
с этим glob
grep -h '(pattherns|to|match)' **/mylogs/*.log