How can I have grep not print out 'No such file or directory' errors?

后端 未结 9 952
情书的邮戳
情书的邮戳 2020-11-28 19:06

I\'m grepping through a large pile of code managed by git, and whenever I do a grep, I see piles and piles of messages of the form:

> grep pattern * -R -         


        
相关标签:
9条回答
  • 2020-11-28 19:28

    Errors like that are usually sent to the "standard error" stream, which you can pipe to a file or just make disappear on most commands:

    grep pattern * -R -n 2>/dev/null
    
    0 讨论(0)
  • 2020-11-28 19:29

    I usually don't let grep do the recursion itself. There are usually a few directories you want to skip (.git, .svn...)

    You can do clever aliases with stances like that one:

    find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;
    

    It may seem overkill at first glance, but when you need to filter out some patterns it is quite handy.

    0 讨论(0)
  • 2020-11-28 19:31

    Have you tried the -0 option in xargs? Something like this:

    ls -r1 | xargs -0 grep 'some text'
    
    0 讨论(0)
  • 2020-11-28 19:33

    I was getting lots of these errors running "M-x rgrep" from Emacs on Windows with /Git/usr/bin in my PATH. Apparently in that case, M-x rgrep uses "NUL" (the Windows null device) rather than "/dev/null". I fixed the issue by adding this to .emacs:

    ;; Prevent issues with the Windows null device (NUL)
    ;; when using cygwin find with rgrep.
    (defadvice grep-compute-defaults (around grep-compute-defaults-advice-null-device)
      "Use cygwin's /dev/null as the null-device."
      (let ((null-device "/dev/null"))
        ad-do-it))
    (ad-activate 'grep-compute-defaults)
    
    0 讨论(0)
  • 2020-11-28 19:40

    If you are grepping through a git repository, I'd recommend you use git grep. You don't need to pass in -R or the path.

    git grep pattern
    

    That will show all matches from your current directory down.

    0 讨论(0)
  • 2020-11-28 19:41

    You can use the -s or --no-messages flag to suppress errors.

    -s, --no-messages suppress error messages

    grep pattern * -s -R -n
    
    0 讨论(0)
提交回复
热议问题