find树中的所有结束子目录

给出以下结构:

oz123@debian:~/ $ tree . . ├── a │  ├── a1 │  ├── a2 │  └── a3 ├── a1 │  ├── a11 │  ├── a12 │  └── a31 ├── b │  └── b1 │  ├── b11 │  │  └── b21 │  │  └── b31 │  ├── b12 │  └── b3 └── c 16 directories, 0 files 

我如何find所有的最终节点?

我发现下面的解决scheme似乎是好的,但我必须certificate,没有testing用例会失败。

链接的帮助页面指出:

您还可以使用“链接”search具有一定数量链接的文件。 目录通常至less有两个硬链接; 他们的。 入口是第二个。 如果他们有子目录,那么每个子目录都有一个名为..的硬链接到其父目录。 的。 除非在find命令行中提到目录条目,否则通常不会search目录条目。

解决办法:

 oz123@debian:~/ $ find . -type d -links 2 ./a/a2 ./a/a3 ./a/a1 ./c ./a1/a31 ./a1/a11 ./a1/a12 ./b/b1/b12 ./b/b1/b3 ./b/b1/b11/b21/b31 
  • 任何人都可以提供更好的解决scheme(不使用pipe道和sed,这是高性能的…)
  • 它可以在任何文件系统上工作吗?

https://stackoverflow.com/questions/4269798/use-gnu-find-to-show-only-the-leaf-directories

 find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \; 

比…慢

 find . -type d -links 2 

无论如何。

尝试下面的一行:

 find . -type d -execdir sh -c 'test -z "$(find "{}" -mindepth 1 -type d)" && echo $PWD/{}' ';'