Bash
如何將 * 與目錄中的隱藏文件匹配
如何匹配給定目錄中的隱藏文件
例如
如果我給出以下命令,它不會給出隱藏文件的結果,
du -b maybehere*/*
如何使用單個命令而不是使用
du -b maybehere*/.* maybehere*/*
因為我需要在這裡輸入兩次。
利用大括號擴展:
du -b maybehere*/{*,.[^.],.??*}
或者
du -b maybehere*/{,.[^.],..?}*
這背後的邏輯可能並不明顯,所以這裡解釋一下:
*
匹配所有非隱藏文件.[^.]
匹配名稱以單點開頭後跟非點的文件;在第一種形式中只有 2 個字元的文件名。.??*
匹配至少 3 個字元長的隱藏文件..?*
像上面一樣,但第二個字元必須是一個點關鍵是要排除指向目前目錄和父目錄(
.
和..
)的硬連結,但要包括所有普通文件,以使每個文件只計算一次!例如,最簡單的就是寫
du -b maybehere*/{.,}*
這意味著該列表包含一個點
.
和“nothing”(nothing is between,
and closing}
),因此所有隱藏文件(從點開始)和所有非隱藏文件(從“nothing”開始)將匹配。問題是這也會匹配.
and..
,這很可能不是你想要的,所以我們必須以某種方式排除它。關於大括號擴展的最後一句話。
大括號擴展是一種機制,您可以通過它通過編寫更少的字元將更多文件/字元串/任何內容包含到命令行中。語法是
{word1,word2,...}
,即它是一個逗號分隔的字元串列表,以 . 開頭{
和結尾}
。bash
手冊給出了一個非常基本但同時又非常常見的用法範例:$ echo a{b,c,d}e abe ace ade