我需要隐藏所有被拒绝的消息:
find . > files_and_folders
当这样的信息出现时,我正在做实验。我需要收集所有的文件夹和文件,它没有出现。
是否可以将权限级别直接指向files_and_folders文件?
如何同时隐藏错误?
我需要隐藏所有被拒绝的消息:
find . > files_and_folders
当这样的信息出现时,我正在做实验。我需要收集所有的文件夹和文件,它没有出现。
是否可以将权限级别直接指向files_and_folders文件?
如何同时隐藏错误?
当前回答
重定向标准错误。例如,如果你在unix机器上使用bash,你可以像这样将标准错误重定向到/dev/null:
find . 2>/dev/null >files_and_folders
其他回答
虽然上述方法不能解决Mac OS X的情况,因为Mac OS X不支持可读开关,这是如何避免在输出中出现“权限拒绝”错误的。这可能会帮助到某些人。
查找/ -type f -name "your_pattern" 2>/dev/null。
例如,如果您使用find命令来查找目录中某些模式的文件的大小,2>/dev/null仍然可以工作,如下所示。
找到。-type f -name "your_pattern" -exec du -ch {} + 2>/dev/null | grep total$。
这将返回给定模式的文件的总大小。注意find命令末尾的2>/dev/null。
简单的回答是:
找到。> files_and_folders 2>&-
2>&-关闭(-)标准错误文件描述符(2),因此所有错误消息都被静音。
如果将打印任何“权限拒绝”错误,退出代码仍将为1
健壮的GNU答案找到:
找到。type d \!\(-readable -executable \) -prune -print -o -print >文件和文件夹
传递额外的选项来查找-prune(防止降为),但仍然-print任何(-typed)不(\!)具有-可读和-可执行权限的目录,或(-o) -print任何其他文件。
-readable和-executable选项是GNU扩展,不是POSIX标准的一部分 可能仍然会对异常/损坏的文件返回'Permission denied'(例如,参见使用lxcfs < v2.0.5影响容器挂载文件系统的错误报告)
健壮的答案,适用于任何posix兼容的查找(GNU, OSX/BSD等)
{LC_ALL=C查找。3>&2 2>&1 1>&3 > files_and_folders | grep -v '权限被拒绝';[$ ?= 1];} 3>&2 2>&1
使用管道将标准错误流传递给grep,删除包含“Permission denied”字符串的所有行。
LC_ALL=C使用一个环境变量设置POSIX区域设置,3>&2 2>&1 1>&3和3>&2 2>&1重复文件描述符将标准错误流管道到grep,并且[$?= 1]使用[]来反转grep返回的错误代码,以近似find的原始行为。
也会过滤任何由于输出重定向导致的“权限拒绝”错误(例如,如果files_and_folders文件本身是不可写的)
Use:
find . ! -readable -prune -o -print
或者更一般地说
find <paths> ! -readable -prune -o <other conditions like -name> -print
避免“拒绝许可” 并且不要压制(其他)错误消息 AND获得退出状态0(“所有文件已成功处理”)
使用:find (GNU findutils) 4.4.2。 背景:
-readable测试匹配可读文件。!当test为false时,运算符返回true。和!-readable匹配不可读目录(&文件)。 -prune操作不会下降到目录中。 ! -readable -prune可以翻译为:如果目录不可读,不要进入该目录。 可读测试会考虑-perm测试忽略的访问控制列表和其他权限构件。
更多细节请参见(1)manpage。
-=适用于苹果操作系统=-
使用别名创建一个新命令:只需添加~/。bash_profile线:
alias search='find / -name $file 2>/dev/null'
在新的终端窗口中,你可以调用它:
$ file=<filename or mask>; search
例如: $ file =等;搜索
您还可以使用-perm和-prune谓词来避免下降到不可读的目录(参见如何从查找程序中删除“拒绝权限”打印输出语句?- Unix和Linux Stack Exchange):
find . -type d ! -perm -g+r,u+r,o+r -prune -o -print > files_and_folders