为什么 ll -d */ 会产生额外的正斜杠?

为什么 ll -d */ 会产生额外的正斜杠?

该命令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

我假设由于 , 设置了附加指示符-Fll -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 "$@"
}

相关内容