如何让grep不打印出“没有这样的文件或目录”错误?

时间:2011-06-21 13:48:50

标签: grep

我正在浏览由git管理的大量代码,每当我执行grep时,我都会看到一堆堆形式的消息:

> grep pattern * -R -n
whatever/.git/svn: No such file or directory

有什么方法可以让这些线条消失吗?

10 个答案:

答案 0 :(得分:260)

您可以使用-s--no-messages标记来抑制错误。

  

-s, - no-messages抑制错误消息

grep pattern * -s -R -n

答案 1 :(得分:56)

如果您正在浏览git存储库,我建议您使用git grep。您无需传递-R或路径。

git grep pattern

这将显示当前目录中的所有匹配项。

答案 2 :(得分:8)

这样的错误通常会发送到“标准错误”流,您可以将其传输到文件或只是在大多数命令上消失:

grep pattern * -R -n 2>/dev/null

答案 3 :(得分:5)

我已经看过多次发生这种情况,链接断开(指向不存在的文件的符号链接),grep尝试搜索目标文件,这不存在(因此错误消息正确无误)。 / p>

我通常不会在通过控制台执行sysadmin任务时烦恼,但是从脚本中我会查找带有“find”的文本文件,然后grep每个:

find /etc -type f -exec grep -nHi -e "widehat" {} \;

而不是:

grep -nRHi -e "widehat" /etc

答案 4 :(得分:4)

我通常不让grep自己做递归。通常有一些目录要跳过(.git,.svn ...)

你可以用这样的立场做聪明的别名:

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

乍一看似乎有点矫枉过正,但是当你需要过滤掉一些模式时,这是非常方便的。

答案 5 :(得分:4)

您是否尝试过 xargs 中的-0选项?像这样:

ls -r1 | xargs -0 grep 'some text'

答案 6 :(得分:1)

在grep中使用-I

示例:grep SEARCH_ME -Irs ~/logs

答案 7 :(得分:0)

我将stderr重定向到stdout,然后使用grep的反向匹配(-v)排除要隐藏的警告/错误字符串:

grep -r <pattern> * 2>&1 | grep -v "No such file or directory"

答案 8 :(得分:0)

在Windows上使用PATH中的/ Git / usr / bin在Windows上的Emacs上运行“ M-x rgrep”时,出现了许多此类错误。在这种情况下,显然M-x rgrep uses "NUL" (the Windows null device) rather than "/dev/null"。我通过将其添加到.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)

答案 9 :(得分:0)

让 grep 始终返回零状态的一种简单方法是使用 Object.objects.bulk_create(Object([Object(property=propertyInfo),Object(property=propertyInfo)]).

|| true

如您所见,此处的输出值为 0(成功)