2016-12-08 177 views
2

打印當前目錄中文件和文件夾列表及其總大小的命令爲du -sh *。然而,該命令本身並沒有列出隱藏的文件或文件夾。我找到了一個能正確列出隱藏文件和文件夾的命令的解決方案:du -sh .[!.]* *。雖然它完美地工作,但解決方案是按原樣提供的,沒有任何解釋。在shell腳本中,。[!。] *是什麼意思?

.[!.]*是什麼意思?它是如何工作的?

回答

2

這是一個全局比較ng模式,它基本上告訴bash找到以.開頭的所有文件,其後是除.之外的任何字符,幷包含之後的任何字符。

請參閱this page瞭解bash globbing模式的詳細說明。

+0

所以它匹配所有帶有'.'前綴的文件/文件夾,同時隱含排除路徑'.'和'..'。非常聰明! –

+0

是的,我也這麼認爲:)這是一個很好的把戲。你能指出你找到它的頁面嗎?可能還有其他的東西需要學習...而且我真的推薦閱讀我指出的頁面。寫這個的人知道他的打擊。 – tgo

+0

這是來自頂部的大約10-15條評論:http://www.ducea.com/2006/05/14/tip-how-to-sort-folders-by-size-with-one-command-line- in-linux/ –

3

. - 匹配.,隱藏文件的前綴

[!.] - 匹配任何字符,只要它不是一個.see ref

* - 任意數目的字符

所以這次的模式表示匹配文件以.開頭但不是..

1

.[!.]*含義是任何文件或目錄名稱以.開頭,但不跟隨.,因此它將包括當前目錄下的所有隱藏文件和目錄,但不包括父目錄。

因爲這個行爲是由shell glob模式決定的。因此,您可以使用ls .[!.]*來查看您的shell環境中實際獲得的內容。

順便說一下,你可以在你的shell中打開dotglob來簡化你的du命令。

$ shopt -s dotglob 
$ du -sh * 
$ shopt -u dotglob 

從bash的手冊

dotglob如果置位時,bash包括與開始的文件名一個`「。在路徑名擴展的結果中。

相關問題