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

-F追加されたサフィックスを含める必要性や価値は明確ではありませんが、追加のインジケータが設定された後にll -d */スラッシュが追加されたとします。つまり/、すでに存在する場合に別のサフィックスを追加する必要があるのはなぜですか?

ll -d */第二に、追加のディレクトリなしでディレクトリのみを一覧表示する方法はありますか/

答え1

生成されたファイルのリストは*/シェルによって生成されます。これは追加されたディレクトリのリストです/

$ echo */
Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ snap/ Templates/ Videos/

これは1つのユーティリティ(シェル)から生成され、さらなるls解析と処理のために別のユーティリティ()に渡されます。

これが結果のリストですls。これが-d各ディレクトリに移動せずに重複したリストを選択する理由です。

lsに "-p"オプションを追加すると、/各ディレクトリの後に追加の値が追加され、それがディレクトリであることを示します。

$ ls -pd */
Desktop//  Documents//  Downloads//  Music//  Pictures//  Public//  snap//  Templates//  Videos//

lsのカラーオプションが有効になっている場合、パス名は1色で表示され、パス/名は別の色で表示されます。

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 "$@"
}

関連情報