How can I exclude directories from grep -R?

前端 未结 13 2130
感动是毒
感动是毒 2020-12-04 04:11

I want to traverse all subdirectories, except the \"node_modules\" directory.

13条回答
  •  攒了一身酷
    2020-12-04 05:14

    Frequently use this:

    grep can be used in conjunction with -r (recursive), i (ignore case) and -o (prints only matching part of lines). To exclude files use --exclude and to exclude directories use --exclude-dir.

    Putting it together you end up with something like:

    grep -rio --exclude={filenames comma separated} \
    --exclude-dir={directory names comma separated}  
    

    Describing it makes it sound far more complicated than it actually is. Easier to illustrate with a simple example.

    Example:

    Suppose I am searching for current project for all places where I explicitly set the string value debugger during a debugging session, and now wish to review / remove.

    I write a script called findDebugger.sh and use grep to find all occurrences. However:

    For file exclusions - I wish to ensure that .eslintrc is ignored (this actually has a linting rule about debugger so should be excluded). Likewise, I don't want my own script to be referenced in any results.

    For directory exclusions - I wish to exclude node_modules as it contains lots of libraries that do reference debugger and I am not interested in those results. Also I just wish to omit .idea and .git hidden directories because I don't care about those search locations either, and wish to keep the search performant.

    So here is the result - I create a script called findDebugger.sh with:

    #!/usr/bin/env bash
    grep -rio --exclude={.eslintrc,findDebugger.sh} \
    --exclude-dir={node_modules,.idea,.git} debugger .
    

提交回复
热议问题