ls特定文件的输出颜色?

时间:2015-03-30 16:39:52

标签: linux git ls

是否可以为特定文件分配ls命令的输出颜色? 我问的原因是对于git存储库,我希望我的跟踪文件与未跟踪的文件具有不同的颜色。所以具体来说,我想得到" git ls-files"的输出。并为这些文件提供某种颜色(或使名称变为粗体或其他)。

2 个答案:

答案 0 :(得分:2)

对于标准的ls命令,它非常简单。我们假设您想要以紫色显示所有.mp3文件,然后运行:

$ LS_COLORS=$LS_COLORS:"*mp3=35:"

此外,请确保您的ls命令启用了--color选项。我通常使用类似的东西:

alias ls='ls --color=auto'

紫色是" 35"。其他基本颜色是:

0   = default colour
1   = bold
4   = underlined
5   = flashing text
7   = reverse field
40  = black background
41  = red background
42  = green background
43  = orange background
44  = blue background
45  = purple background
46  = cyan background
47  = grey background
100 = dark grey background
101 = light red background
102 = light green background
103 = yellow background
104 = light blue background
105 = light purple background
106 = turquoise background

答案 1 :(得分:2)

我想要实现与git目录列表完全相同的东西。

我的解决方案是在Z shell(add-zsh-hook chpwd git-alias)中添加一个钩子,在我更改目录时调用函数git-alias。 函数git-alias根据它是否是git目录来定义ll的功能。

function git-alias {
    # Let ll depend on the current directory
    if git rev-parse --git-dir > /dev/null 2>&1; then
        # Make sure ll has no alias assigned
        alias ll='ls' && unalias ll
        function ll {
            ls $@ -lF|grep --color=never -e '/$' # directories
            ls $@ -lQ|grep -f <(git ls-files -cdmoi --exclude-standard)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[dgray]}\2 (ignored)$reset_color/" # ignored
            ls $@ -l|grep --color=never -f <(git ls-files -c 2>/dev/null) # cached
            ls $@ -lQ|grep -f <(git ls-files -m 2>/dev/null)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[blue]}✎ \2$reset_color/" # modified
            ls $@ -lQ|grep -f <(git ls-files -o --exclude-standard 2>/dev/null)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[blue]}★ \2$reset_color/" # new
            git ls-files -d 2>/dev/null|sed -e "s/^\(.*\)$/Deleted: ${fg[red]}✗ \1$reset_color/" # deleted
        }
    else
        alias ll='ls -lF'
    fi
}

这将返回如下内容:

example output

它仍然不完美(例如,请注意文件'LICENSE'的双重条目以及文件和文件夹的固定顺序),但这是我能做到的最好的。