Shell

如何根據大小列出所有目錄?withoutinclud我__theparent_我rectory在一世噸H○你噸一世nC一世你d一世nG噸H和p一種r和n噸d一世r和C噸○r和without including the parent dire…

  • August 26, 2014

我有一堆隨機文件夾,其中一些是隱藏的(以句點開頭)。我想列出所有這些,按它們的大小排序。

我有這樣的想法:

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來獲得比字母更有用的數字排序。

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