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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash脚本 - 查找具有非零字节内容的目录相关的知识,希望对你有一定的参考价值。

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

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

似乎不起作用

答案

不确定是否完全理解。如果我有./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

另一答案

这个怎么样:

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

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

另一答案

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

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

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

du -sh */ | grep -v 4.0K

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

shopt -s dotglob

以上是关于Bash脚本 - 查找具有非零字节内容的目录的主要内容,如果未能解决你的问题,请参考以下文章

递归查找具有特定扩展名的文件

第八课 突破512字节的限制--下

一种循环冗余校验算法,它对具有特定非零值的尾随字节数不变

如何使用脚本启动具有特定工作目录的 Git Bash 窗口?

在 Bash 中测试非零长度字符串: [ -n "$var" ] 或 [ "$var" ]

如何查找多个文件、检查重复文件并用 bash、sed 脚本替换