Linux

在樹中查找所有結束子目錄

  • September 23, 2015

給定以下結構:

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

16 directories, 0 files

如何找到所有的端節點?

我發現以下似乎不錯的解決方案,但我必須證明沒有測試案例會失敗。

-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
  • 任何人都可以提供更好的解決方案(不使用管道和 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/{}' ';'

引用自:https://serverfault.com/questions/530324