在树中查找所有结束子目录

oz1*_*123 11 command-line find file-search

给定以下结构:

oz123@debian:~/ $ tree .
.
??? a
?   ??? a1
?   ??? a2
?   ??? a3
??? a1
?   ??? a11
?   ??? a12
?   ??? a31
??? b
?   ??? b1
?       ??? b11
?       ?   ??? b21
?       ?       ??? b31
?       ??? b12
?       ??? b3
??? c

16 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

如何找到所有终端节点?

我发现以下似乎不错的解决方案,但我必须证明没有测试用例会失败。

-links各州的帮助页面:

您还可以使用“-links”搜索具有一定数量链接的文件。目录通常至少有两个硬链接;他们的 。入口是第二个。如果它们有子目录,每个子目录也有一个硬链接,称为 .. 到其父目录。这 。和 .. 目录条目通常不会被搜索,除非在 find 命令行中提到它们。

可能的解决方案:

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
Run Code Online (Sandbox Code Playgroud)
  • 任何人都可以提供更好的解决方案(不使用管道和 sed,这已经很高效了......)
  • 它可以在任何文件系统上工作吗?

Mir*_*kár 3

作为您自己的解决方案的补充-links,我想补充一点,它不适用于不遵循 Unix 目录链接约定的文件系统。从man find选项来看,-noleaf这些至少是 CD-ROM、MS-DOS 文件系统和 AFS 卷安装点。

作为参考,这个问题已经通过不同的解决方案进行了讨论,这些解决方案确实速度较慢,并且通常诉诸于 sed / awk 等管道。