Bash

我怎樣才能排除 .和..僅列出隱藏項目時?

  • May 28, 2020

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允許它))。

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