使用 grep 排除目录

Mic*_*lSB 6 linux ubuntu grep

我刚试过:

michael@Pascal:~/noisynet$ sudo grep -rio --exclude-dir={/ece,/home/michael/pytorch,/sys,/proc} 'hello' /
Run Code Online (Sandbox Code Playgroud)

第一场比赛是:

/home/michael/pytorch/.git/logs/HEAD:hello
Run Code Online (Sandbox Code Playgroud)

它为什么要往里看/home/michael/pytorch

小智 12

这会很好用

grep -rio --exclude-dir={ece,pytorch,sys,proc} 'hello' /
Run Code Online (Sandbox Code Playgroud)

注意:这也将排除具有相同名称的其他目录。

解释:

grep 的手册页给出了以下代码段

   --exclude-dir=GLOB
          Skip  any command-line directory with a name suffix that matches the pattern GLOB.  When
          searching recursively, skip any subdirectory whose base name matches GLOB.   Ignore  any
          redundant trailing slashes in GLOB.
Run Code Online (Sandbox Code Playgroud)

这意味着给定的模式(GLOB)将仅应用于目录的实际名称,并且由于目录名称的名称中不包含 /,因此 /proc 之类的模式将永远不会匹配。

因此,我们只需要为--exclude-dir=proc or --exclude-dir=sys (or --exclude-dir={proc,sys})要排除的目录使用名称,而无需使用“/”。