我正在浏览由git管理的大量代码,每当我执行grep时,我都会看到一堆堆形式的消息:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
有什么方法可以让这些线条消失吗?
答案 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(成功)