Unix найти с подстановочной структурой каталогов - PullRequest
2 голосов
/ 04 августа 2011

Я пытаюсь сделать find, где я могу указать шаблоны в структуре каталогов, а затем выполнить grep для www.domain.com во всех файлах в каталоге данных.

е

find /a/b/c/*/WA/*/temp/*/*/data -type f -exec grep -l "www.domain.com" {} /dev/null \;

Это прекрасно работает, когда есть только один возможный уровень между c / * / WA.

Как бы я поступил так же, как в случае, когда между C / * / WA может быть несколько уровней?

Так что это может быть на

/a/b/c/*/*/WA/*/temp/*/*/data 

или

/a/b/c/*/*/*/WA/*/temp/*/*/data

Не существует определенного числа каталогов между /c/ и /WA/; может быть несколько уровней, и на каждом уровне может быть /WA/*/temp/*/*/data.

Есть идеи, как сделать такую ​​находку?

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Как насчет использования цикла for для поиска каталогов WA, а затем перейдите оттуда:

for DIR in $(find /a/b/c -type d -name WA -print); do
    find $DIR/*/temp/*/*/data -type f \
        -exec grep -l "www.domain.com" {} /dev/null \;
done

Вы можете получить все это одной командой, но я думаю, что ясностьболее важно в долгосрочной перспективе.

0 голосов
/ 04 августа 2011

Если предположить, что в путях нет пробелов, то я бы подумал:

find /a/b/c -name data -type f |
grep -E '/WA/[^/]+/temp/[^/]+/[^/]+/data' |
xargs grep -l "www.domain.com" /dev/null

При этом для поиска файлов используется find (вместо того, чтобы оболочка выполняла большую часть работы),затем использует grep -E (эквивалент egrep), чтобы выбрать имена с правильным шаблоном в пути, а затем использует xargs и grep (снова), чтобы найти целевой шаблон.

...