代码
find / -name netcdf
输出
find: `/root/.dbus': Permission denied
find: `/root/.gconf': Permission denied
find: `/root/.gconfd': Permission denied
find: `/root/.gnome': Permission denied
find: `/root/.gnome2': Permission denied
find: `/root/.gnome2_private': Permission denied
答案1
这些消息被发送到 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
。
答案2
我只想指出@Gilles 的这个答案排除使find抱怨权限的路径;它基本上涉及一个构造,find
使其不会下降到不可读的目录中,从这个意义上说,可能也更快一点。
这对我来说似乎有用:
对于 GNU
find
或任何其他find
支持-readable
and-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
),否则如果遗漏其中一个,我仍然可能会遇到“权限被拒绝”的情况。
这是我如何看待这一点的细分(注意is-a
中的 (and) 运算符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
请注意,如果没有最后一个-print
,我会显示一些额外的项目(与 无关-name 'netcdf'
);确保-print
仅打印名称匹配的内容(如果有)。
答案3
改用locate(1)
:
$ locate netcdf
它只会显示您的用户可以看到的文件。