![尝试从 grep 命令中排除特定目录](https://linux22.com/image/1531880/%E5%B0%9D%E8%AF%95%E4%BB%8E%20grep%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E6%8E%92%E9%99%A4%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95.png)
我有一个目录,其中包含数百个以日期为名称的子目录,每个子目录中都有一堆我需要搜索的文件。我现在使用的 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'