Linux

如何只查找沒有子目錄的目錄?

  • January 29, 2019

linux 中有沒有辦法只查看目錄樹中那些是分支末端的目錄(我在這裡稱它們為葉子),即其中沒有子目錄的目錄?我看了這個問題,但從未正確回答。

所以如果我有一個目錄樹

root/
├── branch1
│   ├── branch11
│   │   └── branch111   *
│   └── branch12        *
└── branch2
   ├── branch21        *
   └── branch22
       └── branch221   *

我可以只找到其分支末尾的目錄(標有*的目錄),所以只查看目錄數量,而不是文件數量?在我的真實案例中,我正在尋找帶有文件的文件,但它們是我想在這個例子中找到的“葉子”的一個子集。

要僅查找包含文件的葉目錄,您可以結合參考問題https://unix.stackexchange.com/a/203991/330217>或類似問題<https://stackoverflow.com/a/4269862/10622916>的答案或<https://serverfault.com/a/530328find_! -empty

find rootdir -type d -links 2 ! -empty

檢查硬連結-links 2應該適用於傳統的 UNIX 文件系統。該-empty條件不是 POSIX 標準的一部分,但應該在大多數 Linux 系統上都可用。

根據 KamilMaciorowski 的評論,目錄的傳統連結計數語義對 Btrfs 無效。這在https://linux-btrfs.vger.kernel.narkive.com/oAoDX89D/btrfs-st-nlink-for-directories中得到證實,其中還提到 Mac OS HFS+ 作為傳統行為的一個例外。對於這些文件系統,需要使用不同的方法來檢查葉目錄。

引用自:https://unix.stackexchange.com/questions/497185