
有沒有辦法在終端機中取得不同顏色的SVN控制的資料夾清單?像是「ls」的別名。那麼,當我們輸入“ls”時,所有帶有“.svn”子資料夾的資料夾都應該是黃色的嗎?
謝謝。 (抱歉,如果這是一個愚蠢的問題。)
答案1
你需要一個包裝器來ls
做到這一點。
我在下面寫了這樣的包裝...
它的基本運作原理是:
ls -F
是強制的,因為目錄可以保證具有/
可偵測到的後綴。- 若要將目錄的名稱解析為其位置,請使用目前目錄或第一個非破折號參數(假定為目標目錄)。
- 前景色/背景色是使用每行的第一個數字組來實現的。 XTerm 樣式的數字是三元組,因此第三個和第六個數字是顏色(在我的範例中為 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;
}