Попытка исключить определенный каталог из команды grep

1146
phdumaresq

У меня есть каталог, который содержит сотни подкаталогов, в именах которых есть даты, и внутри каждого из этих подкаталогов есть куча файлов, которые мне нужно искать. Команда grep, которую я сейчас использую, такова:

grep -ER --exclude-dir=2017060200_it2 "PATTERN" *_it2/file00*.pjson

и структура папок выглядит так:

parcel/ |--- 2015010100_it2/ |--- file001.pjson |--- file002.pjson ... |--- file005.pjson |--- 2015010200_it2/ |--- file001.pjson ... ... |--- 2017060200_it2/ |--- file001.pjson |--- file002.pjson ... 

Я хочу, чтобы моя команда grep выполняла поиск file00*.pjsonдля каждого отдельного подкаталога, КРОМЕ самого последнего, в данном случае 2017060200_it2. Тем --exclude-dir=2017060200не менее, мой, кажется, не выполняет это.

Я использую grep V2.20 в системе CentOS 6.7, и когда я использую grep --help, я получаю опцию для использования --exclude-dir, поэтому я не думаю, что эта информация актуальна.

Бонус: если бы вы могли показать мне, как получить текущую дату и отформатировать ее yyyyMMdd00_it2так, чтобы я мог сделать эту работу хроной, это было бы здорово, но я планировал выяснить, как сделать это отдельно, как только я получу эту работу.

0

1 ответ на вопрос

0
Joe P

Ваш --exclude-dir правильный, просто он влияет на рекурсию - но вы явно указали все *_it2каталоги в глобусе файла, и это происходит перед любой рекурсией.

Я предлагаю использовать findвместо этого - что-то вроде (не проверено)

find . -name 2017060200_it2 -prune -name 'file00*.pjson' -execdir grep -E "PATTERN" {} \; 

Бонус: date '+%Y%m%d00_it2'

Потрясающе, сработало очень хорошо! Пришлось немного изменить команду, но это сделало свое дело! Огромное спасибо. Бонус: часть даты тоже сработала, спасибо! phdumaresq 6 лет назад 0
С другой стороны, я заставил это работать, используя `grep --exclude` вместо` grep --exlude-dir` ... Я думал, что `--exclude` для файлов, но я думаю, что это просто рекурсивно поведение... phdumaresq 6 лет назад 0

Похожие вопросы