如何从查找程序中删除“拒绝权限”打印输出语句?


Answers:


35

这些消息被发送到stderr,并且几乎只有那些消息通常在该输出流中可见。您可以关闭它或在命令行上重定向它。

$ find / -name netcdf 2>&-

要么

$ find / -name netcdf 2>/dev/null

另外,如果您要搜索根目录(/),则最好对过程进行优化,以使find不会占用所有资源。

$ nice find / -name netcdf 2>&-

这降低了进程的优先级,从而使其他进程有更多时间在CPU上。当然,如果没有其他东西在使用CPU,它什么也没做。:)从技术上讲,NI值(从中看到ps -l)会增加PRI值。较低的PRI值具有较高的优先级。ps -l与比较nice ps -l


1
我不喜欢抛出警告。更好地处理它们。另外,在现场也不能逃脱。
莱奥波德·赫兹(LéoLéopoldHertz)2016年

1
@LéoLéopoldHertz준영不好...如果您看不到程序输出,因为您的屏幕上充满了错误废话
。.–

20

我只想通过@Gilles在排除使权限抱怨的路径中指出这个答案-Unix &Linux Stack Exchange ; 它基本上涉及一种构造,find该构造使其不会下降到不可读的目录,从这个意义上讲,它可能还快一点。

这似乎对我有用:

使用GNU find或任何其他find支持-readable-executable谓词的对象:

find / -type d ! \( -readable -executable \) -prune -o -type f -name netcdf -print

还是这个:

find / -type d ! -perm -g+r,u+r,o+r -prune -o -type f -name 'netcdf' -print

出于某种原因,我需要添加所有的g+r,u+r,o+r(其快捷方式是a+r),否则,如果其中之一被忽略,我仍然可能会遇到“权限被拒绝”的情况。

这是我如何看待这一情况的细分(请注意,-a(和)运算符in 在两个谓词之间find隐式的):

find /         # find starting from path /
  -type d        # match type is directory
  ! -perm -a+r   # (and) match not permissions of `r`ead present 
  -prune         # ignore what matched above and do not descend into it
  -o             # or (whatever didn't match above)
  -type f        # match type is file
  -name 'netcdf' # (and) match name is 'netcdf'
  -print         # print what matched above

请注意,没有last -print,我会显示一些额外的项目(与无关-name 'netcdf');的-print只有名称匹配被印刷确保(如果有的话)。


2
如果find(1)无法进入目录,则不会。因此,事先检查它是否会增加工作量(检查两次),从而减慢工作速度。
vonbrand 2014年

3
@vonbrand如果依靠这是必要find的退出状态,因为这些权限错误使得find退出非零状态
欧内斯特一个

我无法处理您的提案。当预期输出已满时,我没有输出。unix.stackexchange.com/q/290791/16920但是,我认为否则我认为您的方法是最好的方法。
莱奥波德·赫兹(LéoLéopoldHertz)2016年

1
哇,我不敢相信很难找到这个答案,我现在希望我能做的不仅仅是投票。

8

使用locate(1)来代替:

$ locate netcdf

它只会显示您用户可以看到的文件。


1
这假设它updatedb正在定期运行。在所有Linux系统上并非如此。
Arcege 2011年

3
如果安装了locate(1),则应定期更新其数据库。如果那没有发生,我会认为配置错误,而不是locate(1)的错误。此外,在极少数情况下,您要查找自上次数据库更新以来添加的文件,因此只需手动运行它即可。我发现自己每年大概做六遍,这很容易从locate(1)相对于find(1)的速度优势中支付开销。
沃伦·杨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.