有没有办法在终端中获取具有不同颜色的 SVN 控制文件夹列表?比如“ls”的别名。那么当我们输入“ls”时,所有带有“.svn”子文件夹的文件夹都应该是黄色的?
谢谢。(抱歉,这个问题问得很愚蠢。)
答案1
您需要一个包装器ls
来完成此操作。
我在下面写了这样一个包装器......
它的基本工作原理:
ls -F
是强制的,因为目录保证具有/
可检测到的后缀。- 要将目录名称解析为其位置,要么使用当前目录,要么使用第一个非破折号参数(假定为目标目录)。
- 前景/背景颜色是使用每行的第一个数字集实现的。XTerm 样式的数字是三元组,因此第 3 和第 6 个数字是颜色(在我的示例中为 19 和 85)。当然,颜色可以更改为您想要的任何颜色。
- 这依赖于每个子目录中存在的原始版本
svn
。.svn
如果您使用的是最新版本,其中.svn
仅存在于顶部,则脚本应更改为从“$root/$dir”向上钻取,直到找到包含的父目录.svn
。
这是我的整个脚本(使用而不是ls
直接):
#!/usr/bin/env perl
# by Kevin Grant ([email protected])
use FileHandle;
my $term = (exists $ENV{'TERM'} && defined $ENV{'TERM'}) ? $ENV{'TERM'} : 'vt100';
my $is_xterm = ($term =~ /xterm/);
my $ifh = new FileHandle("ls -F @ARGV|");
(defined $ifh) or die;
my $root = '.';
foreach (@ARGV) {
(! /^\-/) and $root = $_; # assume bare argument is the directory being listed
}
foreach (<$ifh>) {
# 1st is for "ls -l" output (no spaces supported), 2nd is normal "ls" output
if (m|\s(\S+)/| or m|^([^/]+/)|) {
my $dir = $1;
if (-e "$root/$dir/.svn") {
# has a ".svn" subdirectory; colorize it
if ($is_xterm) {
s/\Q${dir}\E/\033[48;5;19;38;5;85m${dir}\033[0m/;
} else {
s/\Q${dir}\E/\033[44;36m${dir}\033[0m/;
}
}
}
print;
}