Linux
在樹中查找所有結束子目錄
給定以下結構:
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/{}' ';'