尝试从 grep 命令中排除特定目录

尝试从 grep 命令中排除特定目录

我有一个目录,其中包含数百个以日期为名称的子目录,每个子目录中都有一堆我需要搜索的文件。我现在使用的 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似乎没有做到这一点。

我在 CentOS 6.7 系统上使用 grep V2.20,当我使用时grep --help,我确实得到了使用选项--exclude-dir,所以我认为这些信息不相关。

奖励:如果您可以向我展示如何获取当前日期并将其格式化,以便yyyyMMdd00_it2我可以将其作为 cron 作业,那就太棒了,但我打算在完成这项工作后弄清楚如何单独执行此操作。

答案1

您的 --exclude-dir 是正确的,它只是影响递归 - 但是您已明确指定*_it2文件 glob 中的所有目录,并且它在任何递归之前。

我建议改用find类似(未经测试)的东西

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

奖金:date '+%Y%m%d00_it2'

相关内容