【问题标题】:Exclude all permission denied messages from "du"排除来自“du”的所有权限被拒绝消息
【发布时间】:2013-02-15 00:01:47
【问题描述】:

我正在尝试评估一些 Unix 用户帐户的磁盘使用情况。 简单地说,我正在使用以下命令:

du -cBM --max-depth=1 | sort -n

但是我看到了很多类似下面的错误信息。如何从显示中排除所有此类“权限被拒绝”消息?

du: `./james/.gnome2': Permission denied

我的请求可能与以下列表非常相似,将“find”替换为“du”。

How can I exclude all "permission denied" messages from "find"?

以下线程不起作用。我想我正在使用 bash。

Excluding hidden files from du command output with --exclude, grep -v or sed

【问题讨论】:

    标签: linux shell warnings suppress-warnings du


    【解决方案1】:

    为了消除来自 du 命令的所有错误,我使用了这个:

    du -sh 2>&1 | grep -v  '^du:'
    

    【讨论】:

      【解决方案2】:

      您可以将它通过管道传输到一个临时文件,例如 -

      du ... > temp_file

      错误会打印在终端上,只有磁盘使用信息会打印到 temp_file 中。

      【讨论】:

      • 很好,但是您需要为临时文件提供磁盘空间,这不是给定的。
      【解决方案3】:

      如果2>/dev/null 不起作用,可能您使用的shell 不是bash

      要检查您使用的外壳,您可以尝试ps -p $$(参见https://askubuntu.com/a/590903/130162

      【讨论】:

        【解决方案4】:

        我会使用简洁的东西,只排除你不想看到的行。将 stderr 重定向到 stdout,并用 grep 排除所有“拒绝”:

        du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n 
        

        【讨论】:

          【解决方案5】:
          du -cBM --max-depth=1 2>/dev/null | sort -n 
          

          在 bash 中或更好(只是过滤掉这个特定的错误,而不是像最后一个 sn-p)

          du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 
          

          【讨论】:

          • @MevatlaveKraspek - 谢谢!如果你有时间,你能解释一下“2>>(grep -v 'Permission denied')”是做什么的吗?
          • -v 是反向匹配。所以看起来它只是过滤 stderr (2>) 并且只隐藏 Permission denied 错误,而不是像第一个命令那样隐藏所有错误。
          【解决方案6】:

          2> /dev/nul 仅隐藏错误消息。

          命令 du 总是尝试遍历目录。想象一下,您有数千个目录?

          du 需要 eval,如果您有权限运行,如果没有,请按照下一个目录...

          【讨论】:

            猜你喜欢
            • 2010-10-20
            • 2021-09-17
            • 1970-01-01
            • 2014-10-19
            • 1970-01-01
            • 1970-01-01
            • 2013-05-03
            相关资源
            最近更新 更多