Shell
如何根據大小列出所有目錄?withoutinclud我__theparent_我rectory在一世噸H○你噸一世nC一世你d一世nG噸H和p一種r和n噸d一世r和C噸○r和without including the parent dire…
我有一堆隨機文件夾,其中一些是隱藏的(以句點開頭)。我想列出所有這些,按它們的大小排序。
我有這樣的想法:
ls -d -1 -a */ | xargs du -s | sort
但
ls ...
它的一部分不顯示隱藏文件。我知道以前曾就同一主題提出過一些問題,但答案從未包括包含隱藏文件的方法。或者如果是這樣,它使用長格式,從而使輸出與命令的其餘部分不兼容。
解析的輸出
ls
總是有問題的。如果您打算自動處理輸出,則應始終使用不同的工具。在您的特定情況下,您的命令失敗 - 不是因為某些缺少或不兼容的參數
ls
- 而是因為您發送它的 glob。您要求ls
列出所有結果,包括帶有 的隱藏結果-a
,但隨後您立即要求它僅列出與*/
glob 模式匹配的內容,而這些內容與開頭的內容不.
匹配,並且任何ls
可能所做的事情都僅限於與 glob 匹配的內容。您也可以將其用作.*/
第二個 glob 來匹配隱藏目錄,或者您可以完全關閉 glob 並讓其ls
完成工作。ls
但是,如果您有要匹配的 glob ,您甚至不需要這樣做。一種解決方案是完全跳過
ls
並只使用 shell globing:*$ du -s */ .*/ | sort -n
對於這個例子來說,另一種可能有點過分但在更複雜的情況下非常強大的方法是使用
find
:*$ find ./ -type d -maxdepth 1 -exec du -s {} + | sort -n
解釋:
find ./
在目前目錄上啟動查找操作。如果您願意,可以使用其他路徑。
-type d
僅查找目錄中的內容
-maxdepth 1
告訴它只在目前目錄中查找目錄,而不是遞歸到子目錄。
-exec [command] [arguments] {} +
工作起來很像xargs
,但find
在引用和轉義名稱時可以完成所有繁重的工作。該{}
位被查找的結果替換。
du -s
你懂的請注意,在這種情況下,我使用
-n
運算符 forsort
來獲得比字母更有用的數字排序。