Библиотека сайта rus-linux.net
slist
Замечание: оболочка Korn /bin/ksh устанавливается инсталляцией pdksh*.rpm с компакт-диска дистрибутива Linux
Сохраните этот файл как текст и выполните для него "chmod a+rx".
Заметьте, что есть другая Unix-команда с именем slist (список доступных серверов Netware), следует удостовериться, что CVS-скрипт slist встречается раньше другого в Вашей переменной окружения PATH.
#!/bin/ksh # CVS-программа slist # Программа перечисления всех отредактированных файлов исходного кода из CVS # Имя каждого файла составляется из 3 частей -- домашнего каталога, # подкаталога и имени файла. Полный путь -- $HOME/$subdir/$fname # В CVS сохраняется такая же структура каталогов (с помощью переменной # $subdir), поэтому в CVS мы будем иметь $CVSROOT/$subdir/$fname # В данной программе эти 4 переменные $HOME, $CVSROOT, $subdir и $fname # играют важную роль. Примеры их значений: # HOME=/home/aldev, subdir=myproject/src CVSROOT=/home/cvsroot # и fname=foo.cpp # Предупреждение: заключите значения переменных, содержащих пробелы # в двойные кавычки: "$HOME/$subdir", если subdir равен "some foo.cpp" # Вызов: # $ slist (Все файлы и подкаталоги) # $ slist *.* (Все файлы) # $ slist * (Все файлы и подкаталоги) # $ slist ab* (Все файлы, начинающиеся на "ab") homedir=` echo $HOME | cut -f1 -d' ' ` if [ "$homedir" = "" ]; then print "\nОшибка: \$HOME не установлен!!\n" exit fi cur_dir=`pwd` #echo $cur_dir len=${#homedir} len=$(($len + 2)) #echo $len subdir=` echo $cur_dir | cut -b $len-2000 ` #echo "subdir is : " $subdir # Если файл уже извлечен другим разработчиком... cvs_root=` echo $CVSROOT | cut -f1 -d' ' ` if [ "$cvs_root" = "" ]; then print "\nОшибка: \$CVSROOT не установлен!!\n" exit fi # Если текущий каталог не находится в корне CVS, то выход if [ ! -d $CVSROOT/$subdir ]; then print "\nКаталог $subdir не существует в $CVSROOT" exit fi #echo "no of params : " $# #echo "The arg $ 1 is : " $1 #echo "all args : " $@ if [ $# -eq 0 ]; then tmpbb=` find * -prune -type d ` elif [ $# -eq 1 ]; then if [ "$1" = "." ]; then tmpbb=` find * -prune -type d ` else if [ -d $1 -a ! -d $CVSROOT/$subdir/$1 ]; then print "\nКаталог $subdir/$1 не существует в $CVSROOT" exit fi tmpbb=$@ fi else tmpbb=$@ fi #echo "The tmpbb is : " $tmpbb # Теперь удалим все имена каталогов, не существующих в корне CVS dirnames="" for ii in $tmpbb ; do if [ -d $CVSROOT/$subdir/$ii ]; then dirnames="$dirnames $ii " fi done #echo "The dirnames is : " $dirnames if [ "$dirnames" != "" ]; then find $dirnames -type f | while read ii do # Перечислить только те файлы, которые находятся в CVS-системе if [ -f "$CVSROOT/$subdir/$ii,v" ]; then #echo "ii is : " $ii ls -l $ii | grep ^\-rw fi done; fi # Получить все файлы в текущем каталоге listfiles=`ls $tmpbb ` find * -prune -type f | while read ii do for jj in $listfiles ; do if [ "$jj" = "$ii" ]; then # Перечислить только те файлы, которые находятся в CVS-системе if [ -f "$CVSROOT/$subdir/$ii,v" ]; then #echo "ii is : " $ii ls -l $ii | grep ^\-rw fi fi done done; |