Bash 汇总特定用户拥有的文件的总大小

Bash 汇总特定用户拥有的文件的总大小,bash,find,file-ownership,Bash,Find,File Ownership,我想总结一下属于特定用户的所有文件(递归)的大小。不过,我不想有一个所有目录的庞大列表,只是总的大小 因此,解决方案类似于: 必须修改,但如何修改 我知道用awk之类的东西进行后处理是可能的,但我想这可以做得更简单。试试这个: find . -user BobTheCat -type d -exec du -shc {} + -prune | egrep '^total\b' -prune防止find递归到目录中,因为du-s已经这样做了,它将导致对每个子目录进行多次计数 du的-c选项告诉它

我想总结一下属于特定用户的所有文件(递归)的大小。不过,我不想有一个所有目录的庞大列表,只是总的大小

因此,解决方案类似于:

必须修改,但如何修改

我知道用awk之类的东西进行后处理是可能的,但我想这可以做得更简单。

试试这个:

find . -user BobTheCat -type d -exec du -shc {} + -prune | egrep '^total\b'
-prune
防止
find
递归到目录中,因为
du-s
已经这样做了,它将导致对每个子目录进行多次计数

du
-c
选项告诉它在末尾打印一个总计,
tail-1
只打印该行


如果您想包含由BobTheCat拥有但不在他拥有的目录中的文件,请从
find
中删除
-type d
,如果您的
find
附带了
-printf
,请使用它。例如:

$ find . -user BobTheCat -type f -printf '%s\n' | awk '{bytes+=$0}END{print bytes}'

这就是问题所在,它与主目录无关。有不同用户的目录和子目录,我只想计算BobTheCat中的目录和子目录。将答案修改为使用
find-删减
。用户“SteveTheDog”拥有但包含“BobTheCat”拥有的文件的文件夹如何?这些文件的大小将被忽略,不是吗?如果您只是删除
-type d
,则包含其他文件的每个目录的总和可能会加倍。哦,没关系
-prune
起作用。为了安全起见,您可能希望执行
|grep'total$”
而不是
|tail-1
。Find有一个args列表长度限制,如果超出该限制,将导致Find拆分匹配目录的列表并执行多次。如果目录不多,可能与此无关,但如果它是一个大型文件系统,则可能会产生意外的结果。@konsolebox怎么会这样?通过跳过不必要的分叉,这可能比任何其他解决方案更干净、更快。是的,如果有人对“no
awk
”吹毛求疵,那么从技术上讲,这不是一个正确的答案,但OP明确指出,他们追求的是一个优雅的解决方案,我相信这就是一个?除非你的意思是别的,我误解了这个问题:)我实际上也会回答
-printf“%s\n”
。这是我在读标题时想到的最快的主意。但这还不足以解决问题。考虑一下对另一个答案的评论。如果解决方案是优雅的话,“没有AWK”并不是一个严格的规则。但你的答案似乎数了好几次文件。对于我的测试目录,打印的尺寸太大了。@konsolebox您想详细说明一下吗?如果不使用涉及
-类型d
的其他结构,我看不出其他答案中的注释是如何相关的。另一个答案在技术上是不正确的(正如Barmar自己所说),因为它不会下降到非BobTheCat所有的目录中,即使它包含由BobTheCat所有的文件,而且在OP的问题中,他们没有声明这是预期行为。请告诉我。@EverythingRightPlace您是如何验证结果“太大”的?
$ find . -user BobTheCat -type f -printf '%s\n' | awk '{bytes+=$0}END{print bytes}'