Я хочу выполнить поиск определенных файлов, которые существуют только под конкретным подкаталогом.Здесь я хочу, чтобы .xml файлы существовали только в подкаталоге /bar/
:
./file0.xml
./.git/file1a.xml
./.git/bar/file1b.xml
./.svn/file2a.xml
./.svn/foo/bar/baz/file2b.xml
./path1/file3.xml
./path1/foo/file4.xml
./path2/foo/bar/file5.xml
./path2/foo/baz/file6.xml
./path3/bar/file7.xml
./path3/foo/bar/baz/file8.xml
. Я хочу, чтобы только следующие файлы были выделены: file5.xml
, file7.xml
, file8.xml
Чтобы исключить .git
и .svn
, я придумал:
grep -r --exclude-dir={.git,.svn} --include=\*.xml "pattern"
, который все еще ищет file3.xml
до file8.xml
.
Если я grep -v
нежелательных каталогов:
grep -r --exclude-dir={.git,.svn} --include=\*.xml "pattern" | grep -v /bar/
Я получаю желаемые результаты, но это занимает много времени при разборе файлов не /bar/
.
Используя find
, чтобы найти xml-файлы в /res/
, я получаю желаемые результаты (и это намного быстрее, чем приведенный выше результат):
find . -type d \( -name .git -o -name .svn \) -prune -o \
-path '*/bar/*.xml' -exec grep "pattern" {} +
Я пытаюсь избежать этого,однако, поскольку я использую это в скрипте и не хочу ограничиваться началом поиска в верхнем каталоге ./
.
Есть ли способ сделать это, используя только grep (так что это неt запретить пользователю указывать дополнительные параметры grep и / или запускать каталоги поиска)?Возможно что-то вроде:
grep -r --exclude-dir={.git,.svn} --include=\*/bar/\*.xml "pattern"