打印當前目錄中文件和文件夾列表及其總大小的命令爲du -sh *
。然而,該命令本身並沒有列出隱藏的文件或文件夾。我找到了一個能正確列出隱藏文件和文件夾的命令的解決方案:du -sh .[!.]* *
。雖然它完美地工作,但解決方案是按原樣提供的,沒有任何解釋。在shell腳本中,。[!。] *是什麼意思?
.[!.]*
是什麼意思?它是如何工作的?
打印當前目錄中文件和文件夾列表及其總大小的命令爲du -sh *
。然而,該命令本身並沒有列出隱藏的文件或文件夾。我找到了一個能正確列出隱藏文件和文件夾的命令的解決方案:du -sh .[!.]* *
。雖然它完美地工作,但解決方案是按原樣提供的,沒有任何解釋。在shell腳本中,。[!。] *是什麼意思?
.[!.]*
是什麼意思?它是如何工作的?
這是一個全局比較ng模式,它基本上告訴bash找到以.
開頭的所有文件,其後是除.
之外的任何字符,幷包含之後的任何字符。
請參閱this page瞭解bash globbing模式的詳細說明。
.[!.]*
含義是任何文件或目錄名稱以.
開頭,但不跟隨.
,因此它將包括當前目錄下的所有隱藏文件和目錄,但不包括父目錄。
因爲這個行爲是由shell glob模式決定的。因此,您可以使用ls .[!.]*
來查看您的shell環境中實際獲得的內容。
順便說一下,你可以在你的shell中打開dotglob
來簡化你的du
命令。
$ shopt -s dotglob
$ du -sh *
$ shopt -u dotglob
從bash的手冊
dotglob如果置位時,bash包括與開始的文件名一個`「。在路徑名擴展的結果中。
所以它匹配所有帶有'.'前綴的文件/文件夾,同時隱含排除路徑'.'和'..'。非常聰明! –
是的,我也這麼認爲:)這是一個很好的把戲。你能指出你找到它的頁面嗎?可能還有其他的東西需要學習...而且我真的推薦閱讀我指出的頁面。寫這個的人知道他的打擊。 – tgo
這是來自頂部的大約10-15條評論:http://www.ducea.com/2006/05/14/tip-how-to-sort-folders-by-size-with-one-command-line- in-linux/ –