bash - 如何从 "permission denied"中排除所有 "find"消息?

标签 bash error-handling find file-permissions

我需要隐藏来自以下来源的所有权限被拒绝消息:

find . > files_and_folders

我正在尝试何时出现此类消息。我需要收集所有不会出现的文件夹和文件。

是否可以将权限级别定向到files_and_folders文件?

如何同时隐藏错误?

最佳答案

用途:

find . 2>/dev/null > files_and_folders

这不仅隐藏了 Permission denied当然是错误,但都是错误消息。

如果您确实想保留其他可能的错误,例如符号链接(symbolic link)上的跃点太多,但不想保留权限被拒绝的错误,那么您可能不得不猜测您没有很多名为 '权限被拒绝'并尝试:

find . 2>&1 | grep -v 'Permission denied' > files_and_folders
<小时/>

如果您严格只想过滤标准错误,则可以使用更精细的构造:

find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2

find 上的 I/O 重定向命令是:2>&1 > files_and_folders | 。 管道将标准输出重定向到 grep命令并首先应用。 2>&1将标准错误发送到与标准输出相同的位置(管道)。 > files_and_folders将标准输出(但不是标准错误)发送到文件。最终结果是写入标准错误的消息被沿着管道发送,并且常规输出 find被写入文件。 grep过滤标准输出(您可以决定您想要的选择性,并且可能必须根据区域设置和操作系统更改拼写)和最终的 >&2意味着幸存的错误消息(写入标准输出)再次进入标准错误。最终重定向在终端上可以被视为可选,但在脚本中使用它是一个非常好的主意,以便错误消息出现在标准错误上。

这个主题有无穷无尽的变化,具体取决于您想要做什么。这将适用于具有任何 Bourne shell 衍生品(Bash、Korn 等)的任何 Unix 变体以及 find 的任何 POSIX 兼容版本。 .

如果您希望适配find的特定版本您的系统上可能有其他可用选项。 GNU find特别是有许多其他版本中不可用的选项 - 请参阅当前接受的一组此类选项的答案。

关于bash - 如何从 "permission denied"中排除所有 "find"消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/762348/

相关文章:

mysql - 如何以 json 格式导出所有具有从所述日期到所述日期的对话表的数据库

linux - 从 bash 脚本设置串口流量控制线?

flash - 我不能记录已发布的Flash或ActionScript应用程序的错误吗?

Python在html元素末尾查找文本

MongoDB:在给定行之前和之后按顺序返回行?

linux - 如何编译 bash?

perl - 为什么 '$_' 与 Perl 单行代码中的 $ARGV 相同?

python - 不支持的操作数类型错误

php - 创建密码恢复表-插入值时出错

c++ - 我不明白为什么我的 .find 函数不起作用