Bash
我怎樣才能排除 .和..僅列出隱藏項目時?
ls -d .*
僅列出隱藏的“項目”(文件和目錄)。(我認為)從技術上講,它列出了以 開頭的每個項目.
,其中包括目前目錄.
和以上..
目錄。我也知道
ls -A
列出了“幾乎所有”的項目,列出了隱藏和未隱藏的項目,但不包括.
and..
。但是,將這些組合起來ls -dA .*
並沒有列出“幾乎所有”我的隱藏項目。如何排除
.
以及..
僅列出隱藏項目時?
這已在Ask Ubuntu中得到解答,我將在此處重現:
ls -d .!(|.)
使用 Bash 的擴展 glob(shopt -s extglob
啟用)
ls -d .[!.]* ..?*
如果不
您可以結合所有情況
.
,不包括..
1。這也不會因特殊文件名而窒息:ls -d .[!.]* ..?*
如果目錄確實有太多內容,冒著命令失敗的風險
Argument list too long
,那麼可以使用它來代替(但是-printf '%f\n'
刪除前導的可選選項./
是特定於 GNU find 並且-maxdepth
在 POSIX 中不存在):find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')' -printf '%f\n'
然後處理特殊字元,例如 LF,
-print0
可以使用 like 選項,但是所有工具都必須支持它(GNU 或 FreeBSD 變體支持它,除了-printf '%f\0'
出現 GNU-only 並且可以替換為-print0
但保留前導./
):find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')' -printf '%f\0'| sort -z | xargs -0 [...]
1:POSIX 指定括號以
[!
否定文件名擴展中的字元開始,而不是[^
(如在正則表達式中)具有未指定的結果(即使例如bash允許它))。