首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的“查找-exec du”不起作用?

为什么我的“查找-exec du”不起作用?
EN

Unix & Linux用户
提问于 2021-11-23 16:07:16
回答 1查看 86关注 0票数 0

我希望获得目录树的磁盘使用情况,不包括以“.”开头的分支,而且我最终希望在ssh上运行它,所以我不喜欢使用管道。当我运行以下命令时,我会得到所有目录的列表:

代码语言:javascript
复制
> /bin/find . \( -name .[^.]\* -prune \) -o \( -type d -exec /bin/echo -sh {} + \)
-sh ./dir-1 ./dir-2 ./dir-3 [...]

当我自己运行du时,我得到了预期的输出:

代码语言:javascript
复制
> /bin/du -sh ./dir-1 ./dir-2 ./dir3 [...]
11M     ./dir-1
254K    ./dir-2
15M     ./dir-3
[...]

当我将两者结合在一起时,我只得到了总行:

代码语言:javascript
复制
> /bin/find . \( -name .[^.]\* -prune \) -o \( -type d -exec /bin/du -sh {} + \)
1.4G    .

顺便说一下,我正在运行OracleLinuxServerRelease7.9和GNU,版本4.2.46(2)-release (x86_64-redhat- Linux -gnu)

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-11-23 16:41:51

总结时,du只计算一次目录。

代码语言:javascript
复制
du -sh . somedir

将只显示.,因为somedir是在.中计算的。秩序是重要的,所以

代码语言:javascript
复制
du -sh somedir .

将同时显示somedir.,并在.中不计算somedir

您的find命令最后包含了.,所以这就是您看到的全部内容,因为它首先出现。您可以通过指定最小深度来避免这种情况;然后将直接看到当前目录下所有目录的总数。

如果这就是你想要的,那么

代码语言:javascript
复制
du -sh */

将产生相同的结果,而不使用find

如果您想要详细的、每个目录的输出,您需要告诉find先列出目录的深度;然后-prune不能工作,但是对路径的过滤是这样的:

代码语言:javascript
复制
find . -mindepth 1 -depth -type d \! -path '*/.*' -exec du -sh {} +

(请注意,隐藏目录的大小仍将在任何非隐藏父目录的大小中考虑。)

如果您的du支持--exclude,您可以使用它来达到同样的效果:

代码语言:javascript
复制
du -h --exclude '*/.*' ./
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/678757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档