如何使用Bash脚本查找工作目录中包含至少一个非零字节文件的所有目录?这个命令:
find . -maxdepth 1 -type d -size +1c | sort
似乎不起作用。
find . -maxdepth 2 -type f -size +1c -exec dirname {} \; | sort | uniq
这个过程会深入一层,查找非空文件,然后获取它们的父级目录,最后去除重复项。
不确定是否完全理解。如果我有./lvl1/lvl2/file(文件非空),而lvl1仅包含空文件和目录lvl2,那么lvl1应该出现在输出中吗?
我假设你希望它出现在输出中。认为这个方法可行:
find . -mindepth 2 -type f -size +0 | cut -d/ -f2 | uniq
在工作目录的所有子目录中查找以查看其中是否有任何非空文件。进行剪切,以便我们只看到感兴趣的级别名称。uniq,因为一个目录只包含1个非空文件的可能性很小。
编辑:最慢的事情可能是(lol没有进行任何测试),find在找到大小>0的文件后继续查找目录(此时应该能够停止查找)。可以在每个子目录上调用find,然后当find看到第一个匹配项时退出。
for DIR in `find . -mindepth 1 -maxdepth 1 -type d`; do
find "$DIR" -type f -size +0 -print -quit
done | cut -d/ -f2
可以在此处放弃对唯一性的调用(因为每个顶级目录只会有1个结果)。 我认为做任何事情来摆脱切割都不会有太大帮助。
另一件事是,您可能希望更改它查看常规文件而不是查看目录之类的内容(它将跳过一堆东西)。 呃,考虑使用“!-type d”而不是“-type f”
即将入睡,我有可能会错过某些事情 / 干傻事 xD
我使用这个,反转 grep 因为空目录显示为 4.0K
du -h --max-depth=0 */ | grep -v 4.0K
编辑:
不使用max-depth
,并且使用summary
du -sh */ | grep -v 4.0K
shopt -s dotglob