У меня есть каталог, который содержит сотни подкаталогов, в именах которых есть даты, и внутри каждого из этих подкаталогов есть куча файлов, которые мне нужно искать. Команда 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 чтобы я мог сделать это заданием cron, это было бы здорово, но я планировал выяснить, как сделать это отдельно, как только получу эту работу ,

1 ответ1

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .