Bash脚本 - 查找具有非零字节内容的目录

问题描述 投票:4回答:3

我将如何使用Bash脚本在我的工作目录中找到至少包含非零字节文件的所有目录?这个 :

find . -maxdepth 1 -type d -size +1c | sort

似乎不起作用

bash find
3个回答
1
投票

不确定是否完全理解。如果我有./lvl1/lvl2/file(文件非空)并且lvl1只包含空文件和目录lvl2,那么输出中是否应该出现lvl1?

我以为你想要它。认为这工作:

find . -mindepth 2 -type f -size +0 | cut -d/ -f2 | uniq

查找工作目录的所有子目录中的内容,以查看其中是否存在非空文件。我们只看到感兴趣的关卡名称。 uniq,因为目录不太可能只包含1个非空文件。

编辑:减慢它的最大的事情可能是(没有做任何测试lol)在找到大小> 0的文件之后发现继续查找目录(我们应该能够停止查看这一点)。可以在每个子目录上调用find,然后在看到第一个匹配时找到exit。

for DIR in `find . -mindepth 1 -maxdepth 1 -type d`; do
    find "$DIR" -type f -size +0 -print -quit
done | cut -d/ -f2

可以在这里放弃对uniq的调用(因为每个顶级目录只有1个结果)。我不认为做任何事情来摆脱削减将有很大帮助。

另一件事是你可能想要改变它看着常规文件,而不是看目录或其他东西(它会跳过一堆东西)。呃,而不是“-type f”考虑使用“!-type d”

即将入睡所以我完全有可能错过了一些东西/做了一些愚蠢的xD


3
投票

这个怎么样:

find . -maxdepth 2 -type f -size +1c -exec dirname {} \; | sort | uniq

这更深入一层,寻找非空文件,然后获取它找到的任何内容的父目录,然后删除重复项。


0
投票

我使用它,转换grep因为空目录显示为4.0K

du -h --max-depth=0 */ | grep -v 4.0K

编辑:没有max-depth和使用summary

du -sh */ | grep -v 4.0K

请注意,如果您要包含点目录,请确保已设置

shopt -s dotglob
© www.soinside.com 2019 - 2024. All rights reserved.