我需要使用:
grep -rio pattern --exclude-dir=".config/dir1*" --exclude-dir=".test*"
为了grep
避免名称中包含和pattern
的所有文件夹,.config/dir1
.test
例如.config/dir1
, 、.config/dir1/dir2
、.test
和./other/.test
应排除在外。
我所做的并没有排除这些文件夹,你能帮我吗?
谢谢
答案1
你的命令做.test/
排除和 中的文件other/.test/
。
它不排除其中的文件,.config/dir1
因为--exclude-dir
只查看目录的基本名称,而不查看其完整路径。您需要--exclude-dir="dir1"
,它elsewhere/dir1
也排除。请注意,如果排除某个目录,则其子目录也会被排除,因此--exclude-dir="dir1"
也会排除.config/dir1/dir2
.
如果 grep 的排除模式对您来说不够,您可以find
与结合使用grep
。的语法find
更复杂,但功能更强大。例如,您可以排除.config/dir1
但不排除其他名为 的目录dir1
。 (我假设你有 GNU find,因为你有 GNU grep。)
find . \
-path "./.config/dir1" -prune -o \
-name ".test" -prune -o \
-type f -print0 |
xargs -0 grep -io pattern