Есть ли способ получить список контролируемых SVN папок с разными цветами в терминале? Как псевдоним "ls". Поэтому, когда мы набираем "ls", все папки с подпапкой «.svn» должны быть желтыми, например?
Благодарю. (Извините, если это глупый вопрос.)
Вам понадобится обертка вокруг ls
чтобы сделать это.
Я написал такую обертку ниже ...
Как это в принципе работает:
ls -F
принудительно, потому что каталоги гарантированно будут иметь суффикс /
который можно обнаружить.svn
где .svn
присутствовал в каждом подкаталоге. Если вы используете последнюю версию, где .svn
присутствует только сверху, сценарий должен измениться на "детализация вверх" от «$ root / $ dir», пока не найдет родительский каталог, содержащий .svn
.Вот весь мой скрипт (используйте вместо ls
напрямую):
#!/usr/bin/env perl
# by Kevin Grant (kevingrant.engineer@gmail.com)
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;
}