Linux Mint 18.3下递归查找日志文件并排除特定权限拒绝路径
解决Linux Mint下find日志文件时的gvfs权限错误问题
我刚好在类似场景里踩过坑,gvfs的权限提示确实烦人,但直接把所有错误丢去/dev/null又太鲁莽——万一真有其他系统问题(比如某个目录损坏)就完全看不到了。给你一个精准的命令,既能跳过无意义的gvfs路径,又只过滤掉真正不需要的权限错误:
find / -type f \( -name "*.log" -o -name "*.log.*" \) -path "/run/user/*/gvfs" -prune -o -print 2> >(grep -v "Permission denied")
命令详细拆解:
让我们一步一步拆解每个部分的作用:
基础搜索规则:
find / -type f \( -name "*.log" -o -name "*.log.*" \)find /:从根目录开始递归搜索所有文件-type f:只匹配普通文件(排除目录、设备文件等非日志类文件)\( -name "*.log" -o -name "*.log.*" \):匹配所有.log结尾的文件,以及带后缀的归档日志(比如.log.1、.log.gz这类),括号和转义是为了让-o(或)的逻辑正确生效
精准排除gvfs路径:
-path "/run/user/*/gvfs" -prune -o -print-path "/run/user/*/gvfs":匹配所有登录用户的gvfs虚拟文件系统路径(Linux Mint里每个用户登录后都会生成/run/user/[UID]/gvfs这样的路径,里面没有系统日志,完全没必要搜索)-prune:告诉find不要进入匹配到的目录,从根源上避免访问这个路径产生权限错误-o -print:逻辑“或”,表示如果前面的路径匹配不成立(也就是不在gvfs目录范围内),就打印找到的文件。这部分是核心,直接跳过了gvfs的搜索,而不是事后过滤错误
过滤剩余权限错误(保留其他有用错误):
2> >(grep -v "Permission denied")2>:把标准错误流(也就是错误提示信息)重定向>(grep -v "Permission denied"):用进程替换把错误信息传给grep,只过滤掉包含"Permission denied"的行。这样如果遇到其他错误(比如磁盘I/O错误、无效路径),你还是能看到提示,不会错过重要系统问题
额外优化建议:
如果你的任务只需要查找系统日志,也可以把搜索范围缩小到/var/log、/var/lib这类常见日志目录,命令会执行得更快,也更少出现权限问题:
find /var/log /var/lib -type f \( -name "*.log" -o -name "*.log.*" \) 2> >(grep -v "Permission denied")
内容的提问来源于stack exchange,提问作者ktii
相关产品推荐
相关产品推荐

