我想使用ls
别名(如l.
)输出一个彩色列表,仅包含隐藏的文件和目录,无论它们是否以点开头。有什么建议么?
期望结果的示例...
## Listing all contents of $PWD
$ ls -AF
file directory/
.dot-file .dot-directory/
hidden-file hidden-directory/
## Listing all hidden contents of $PWD, using alias `l.`
$ l.
.dot-file .dot-directory/
hidden-file hidden-directory/
研究...
我看过类似问题的答案。这些答案很棒,但并没有完全实现我的要求,因为:
- 它们仅显示隐藏的点文件
- 如果我运行
chflags hidden file
,那么file
将被排除在l.
输出之外
- 如果我运行
- 它们仅限于以
grep
样式显示隐藏的点文件,而不是ls
样式- 这很重要,因为我可能想
-l
在那里扔一面旗子
- 这很重要,因为我可能想
细节
## Current `ls` alias
alias ls="ls -h ${COLORFLAG}"
我同时使用bash
& zsh
。
答案1
这将使用该find
命令检索点文件和设置了“隐藏”标志的文件。
匹配的文件作为参数列表输入ls
via sed
(以删除“.”结果以及前导“./”前缀)和xargs
.这允许指定附加ls
参数(例如-l
)。
alias l.="find . \( -flags +hidden -or -name '.*' \) -maxdepth 1 | sed 's/^\.\/*//' | xargs ls -d"
整个构造旨在仅列出当前目录(-maxdepth 1
参数 to find
);如果不希望这样做,则需要引入条件来检查-R
选项并相应地抑制该maxdepth
选项find
。
例子:
$ ls -alO
total 8
drwxr-xr-x 9 guido staff - 306 Apr 13 22:43 .
drwxr-xr-x+ 6 guido staff - 204 Apr 13 19:00 ..
drwxr-xr-x 2 guido staff - 68 Apr 13 22:43 .hiddendir
-rw-r--r-- 1 guido staff - 0 Apr 13 21:48 .xx
-rw-r--r-- 1 guido staff - 0 Apr 13 21:17 file
-rw-r--r-- 1 guido staff - 18 Apr 13 21:03 file.b
drwxr-xr-x@ 2 guido staff hidden 68 Apr 13 22:43 hidden2
-rw-r--r--@ 1 guido staff hidden 0 Apr 13 22:35 hide
drwxr-xr-x 2 guido staff - 68 Apr 13 21:51 tst
$ l.
.hiddendir .xx hidden2 hide
$ l. -alO
drwxr-xr-x 2 guido staff - 68 Apr 13 22:43 .hiddendir
-rw-r--r-- 1 guido staff - 0 Apr 13 21:48 .xx
drwxr-xr-x@ 2 guido staff hidden 68 Apr 13 22:43 hidden2
-rw-r--r--@ 1 guido staff hidden 0 Apr 13 22:35 hide