2008-11-14 3 views
4

Как совершенно новичок в Linux, у меня есть вопрос. У меня есть список файлов (на этот раз результат svn status), и я хочу создать сценарий, чтобы зацикливать их все и заменить вкладки на 4 пробела.Как скомпилировать файлы в linux из svn status

Так что я хочу от

.... 
D  HTML/templates/t_bla.tpl 
M  HTML/templates/t_list_markt.tpl 
M  HTML/templates/t_vip.tpl 
M  HTML/templates/upsell.tpl 
M  HTML/templates/t_warranty.tpl 
M  HTML/templates/top.tpl 
A + HTML/templates/t_r1.tpl 
.... 

к чему-то вроде

for i in <files>; expand -t4;do cp $i /tmp/x;expand -t4 /tmp/x > $i;done; 

, но я не знаю, как это сделать ...

ответ

16

Вы можете использовать эту команду:

svn st | cut -c8- | xargs ls 

Это позволит сократить первые 8 символов, оставив только список имен файлов, без флагов Subversion. Вы также можете добавить grep до cut, чтобы фильтровать только некоторые изменения, например /^M/. xargs передаст список файлов в качестве аргументов для данной команды (ls в этом случае).

+0

Благодарю вас также за ваш ответ, я объединю его с Дэном. – eddy147 2008-11-14 10:11:07

3

Я хотел бы использовать СЭД, например, так:

for i in files 
do 
    sed -i 's/\t/ /' "$i" 
done 

Этот большой блок в нем четыре пробела. ;-)

Я не проверял это, но он должен работы. И я на всякий случай создам резервные копии ваших файлов. Флаг -i означает, что он будет выполнять замены в файлах на месте, но если это испортится, вы захотите восстановить их.

Предполагается, что $ files содержит имена файлов. Тем не менее, вы также можете использовать подход Адама при захвате имен файлов, просто используйте команду sed выше без «$ i».

+0

спасибо за ваш ответ. Но как заполнить в цикле ?? – eddy147 2008-11-14 10:01:52

+0

Посмотрите на ответ Адама. По сути, они объединяют два. Его ответ предоставит вам список имен файлов для работы, а затем вытащите мою команду sed вместо окончательного «ls». – 2008-11-14 10:02:48

2

я не смог проверить его с реальным выходом диверсии, но это должно сделать работу:

svn st | cut -c8- | while read file; do expand -t4 $file > "$file-temp"; mv "$file-temp" "$file"; done 

svn st | cut -c8- будет генерировать список файлов без подрывных флагов. read затем сохранит каждую запись в переменной $file, а expand используется для замены вкладок четырьмя пробелами в каждом файле.

3

не просит каких-либо голосов, но и для записи я выложу объединенный ответ от @Adam Byrtek и @Dan Fego:

svn st | cut -c8- | xargs sed -i 's/\t/ /' 
0

Не совсем то, что вы просите, но, возможно, вы должны смотреть на совершение крюки в подрывной деятельности?

Вы можете создать крючок для блокировки регистрации любого кода, который содержит вкладки в начале строки или вообще содержит вкладки.

В каталоге repo на сервере subversion появится каталог с именем hooks. Поместите что-то там, которое является исполняемым, называется «pre-commit», и оно будет запущено до того, как что-либо будет разрешено. Он может вернуть статус, чтобы заблокировать фиксацию, если хотите.

Вот что я должен остановить PHP файлы с синтаксическими ошибками проверяется в:

#!/bin/bash 
REPOS="$1" 
TXN="$2" 
PHP="/usr/bin/php" 

SVNLOOK=/usr/bin/svnlook 

$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null 

if [ $? -ne 0 ] 
then 
    echo 1>&2 
    echo "You must enter a comment" 1>&2 
    exit 1 
fi 


CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}'` 

for LINE in $CHANGED 
    do 
    FILE=`echo $LINE | egrep \\.php$` 
    if [ $? == 0 ] 
    then 
    MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "${FILE}" | $PHP -l` 
    if [ $? -ne 0 ] 
     then 
     echo 1>&2 
     echo "***********************************" 1>&2 
     echo "PHP error in: ${FILE}:" 1>&2 
     echo "$MESSAGE" | sed "s| -| $FILE|g" 1>&2 
     echo "***********************************" 1>&2 
     exit 1 
    fi 
    fi 
done 
Смежные вопросы