该命令ls -d */
仅列出目录,如下
Desktop/ Downloads/ Pictures/ snap/ Videos/
Documents/ Music/ Public/ Templates/
该命令ll -d */
也将结果限制为目录,但附加了一个额外的正斜杠。
(ll
是一个别名ls -alF
)
drwxr-xr-x 2 ec ec 4096 Jan 12 06:39 Desktop//
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Documents//
drwxr-xr-x 7 ec ec 4096 Jan 12 21:12 Downloads//
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Music//
drwxr-xr-x 2 ec ec 4096 Jan 5 20:47 Pictures//
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Public//
drwxr-xr-x 3 ec ec 4096 Jan 5 15:16 snap//
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Templates//
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Videos//
如果运行该命令ls -ald */
,则它不包含附加的正斜杠。
drwxr-xr-x 2 ec ec 4096 Jan 12 06:39 Desktop/
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Documents/
drwxr-xr-x 7 ec ec 4096 Jan 12 21:12 Downloads/
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Music/
drwxr-xr-x 2 ec ec 4096 Jan 5 20:47 Pictures/
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Public/
drwxr-xr-x 3 ec ec 4096 Jan 5 15:16 snap/
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Templates/
drwxr-xr-x 2 ec ec 4096 Jan 4 19:54 Videos/
相反,ls -alFd */
返回相同的结果ll -d */
根据man ls
旗帜-F
--classify append indicator (one of */=>@|) to entries
。
我假设由于 , 设置了附加指示符-F
,ll -d */
所以附加了正斜杠,尽管尚不清楚包含附加后缀的必要性或价值,即/
如果已经存在一个后缀,为什么还需要添加另一个后缀?
其次,有没有办法只列出目录而ll -d */
无需额外的/
?
答案1
创建的文件列表*/
由 shell 生成。它是一个已附加的目录列表/
:
$ echo */
Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ snap/ Templates/ Videos/
这是在一个实用程序(shell)中生成的,并交给另一个实用程序(ls
)以供其进一步解析和处理。
这就是得到的列表ls
。这就是为什么您需要选择-d
重复列表而不进入每个目录的原因。
如果向 ls 添加“-p”选项,它将/
在每个目录后附加一个附加值以表明它是一个目录:
$ ls -pd */
Desktop// Documents// Downloads// Music// Pictures// Public// snap// Templates// Videos//
如果 ls 的颜色选项处于活动状态,您应该会看到一种颜色的路径名和/
另一种颜色的路径名。
ls选项-F
与 选项类似,-p
但它也可以使用其他字符来表示其他类型的文件(不仅是目录)该列表中的每个字符:其中之一*/=>@|
答案2
有一种方法可以仅使用 ll -d */ 列出目录,而无需额外的 /。
如果你把下面的函数放在.bashrc中,它会在你执行“unalias ll”或从.bashrc中删除“alias ll”后生效
function ll {
local option=F OPTIND c
while getopts d c; do
case $c in
d) option=$c;;
esac
done; shift "$((OPTIND - 1))"
ls -la -$option "$@"
}