如何删除"权限被拒绝"从这个输出? + bash

时间:2015-06-24 23:56:30

标签: bash

如何删除"权限被拒绝"从这个输出?

$ du -ksh * | sort -n -r | grep -v "Permission denied"
du: cannot read directory `$Recycle.Bin/S-1-5-18': Permission denied
du: cannot read directory `$Recycle.Bin/S-1-5-21-1952864042-553127817-1365347855-1002': Permission denied
du: cannot read directory `$Recycle.Bin/S-1-5-21-1952864042-553127817-1365347855-500': Permission denied
du: cannot read directory `$Recycle.Bin/S-1-5-21-1995575548-1017590607-168656324-2178': Permission denied

我尝试了以下内容:

du -ksh * | sort -n -r | grep -v "Permission denied"

du -ksh * | sort -n -r 2>&1 | grep -v "Permission denied"

3 个答案:

答案 0 :(得分:2)

如果我们消除du:

中的错误,我们可以从管道中消除grep
du -ks * 2>/dev/null | sort -n -r 

删除grep的速度提高了一个数量级。同时删除du的-h开关将有助于数字排序做正确的事情并显示列表顶部的最大文件。

答案 1 :(得分:0)

你是对的,你将需要过滤stderr,而不是stdout(或在过滤之前将一个重定向到另一个)。但是,您似乎正在重定向sort的输出,而不是du。

答案 2 :(得分:0)

错误来自du,而不是sort,因此您需要重定向其stderr。你应该在排序之前将它们过滤掉;它对结果没有影响,但排序很昂贵,所以你应该尽量减少它的输入。

du -ksh * 2>&1 | grep -v 'Permission denied' | sort -n -r