AIX:查找非空目录

AIX:查找非空目录

在许多 unix 系统中,你可以执行以下操作:

find . -type d ! -empty

在 AIX 系统中,-empty 似乎无法被识别。有什么想法可以实现同样的效果吗?

答案1

Dan McG 的想法是对的。这有效:

find  . -type d -links 2 -exec sh -c '[ -z "$(ls -UA "$1/" )" ]' dummy {} \; -print

-links 2 通过排除带有子目录的目录来节省时间,因为如果 AIX 与大多数 Unix 系统一样,目录可以拥有的唯一链接是它自己的 . 条目以及其子目录中的 .. 条目。

ls -UA 不必排序(-U),也不需要统计文件,只输出从 readdir 获取的内容,所以还不错。-A 省略了 . 和 ..,因此如果输出是空字符串,则目录为空。

如果您无论如何都要调用 sh -c,那么您可以在 sh 中对每个空目录执行所需的操作,而不是使用 find -print0 的输出。非 GNU find 没有 -exec {} +(即内置 xargs),这太糟糕了。

也许如果你处理 find 的输出,你可以更有效地完成它。例如,如果你看到连续两个目录没有文件,那么你有一个空目录?但是,对每个目录运行 sh -c 和 ls 并不是那么慢。

答案2

首先,POSIX 标准中没有为 find 指定 empty,这就是为什么并非所有版本都支持它。

我不确定具体该怎么做,但这可能会为你指明解决问题的方向。

find . -type d -exec command '{}' \;

这将为每个目录执行“命令”,该目录作为参数。

现在,你可以使用类似如下的方法:

find . -type d -exec sh -c 'ls -R $1 | wc' dummy {} \;

显然,这不起作用,但可能会有一点帮助!

相关内容