2011-06-22 24 views

回答

1

不確定是否完全理解。如果我有./lvl1/lvl2/file(文件非空)並且lvl1只包含空文件和目錄lvl2,則應該在輸出中顯示lvl1?

我以爲你想要它。認爲這工作:

find . -mindepth 2 -type f -size +0 | cut -d/ -f2 | uniq 

找到工作目錄的所有子目錄中查看是否有一個非空文件在它的任何地方。切,所以我們只看到感興趣的關卡名稱。 uniq,因爲一個目錄不太可能只包含一個非空文件。

編輯:減慢它最大的事情可能是(沒有做任何測試大聲笑),找到一個大小> 0(我們應該能夠停止看這一點)的文件後繼續查找目錄中, 。可以在每個子目錄上調用find,然後在看到第一個匹配時找到退出。

for DIR in `find . -mindepth 1 -maxdepth 1 -type d`; do 
    find "$DIR" -type f -size +0 -print -quit 
done | cut -d/ -f2 

可以在這裏放棄對uniq的調用(因爲每個頂級目錄只有1個結果)。我不認爲做任何事情來擺脫這一切將有很大幫助。

另一件事是,你可能想改變,這看着普通的文件,它不看目錄或東西(它會跳過一堆東西)。呃,而不是「型F」考慮使用「!型d」

即將入睡所以它是完全有可能我錯過了什麼/做了一件愚蠢的xD

+0

確實 - 我想檢測所有目錄中零字節的內容 - 如右鍵單擊>大小= 0 - 空白或包含零或空字節文件或文件夾是空的或包含零字節文件等 - 你的一班輪做工作 - 也許我雖然錯過了一些邊緣案例 - 仍然可能有點快一點? –

+0

感謝您的編輯!現在不能檢查它,但看起來沒問題 - 謝謝:) –

0

我用這個,相反的grep因爲空目錄顯示爲4.0K

du -h --max-depth=0 */ | grep -v 4.0K 

編輯:max-depth和使用summary

du -sh */ | grep -v 4.0K 

注意,如果你有你想包括確保您已設置點目錄

shopt -s dotglob 
+0

排除空迪爾斯但不包含迪爾斯只有零字節的文件 –

+0

是那些隱藏的目錄? –

+0

nope - 在正常的人 –

3

如何:

find . -maxdepth 2 -type f -size +1c -exec dirname {} \; | sort | uniq 

這每深入一層,尋找非空文件,然後得到找到任何東西的父目錄 ,然後刪除重複項。

+0

不知道爲什麼,但工程:) - 必須確保它的工作原理當dir包含與非零字節文件的dirs,但仍然沒有文件 - 它不::( –

+1

'sort -u'相當於' sort | uniq'。+1無論如何。 – mouviciel