как цикл файлов в Linux от статуса Svn

голоса
4

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

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

....
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;

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

Задан 14/11/2008 в 10:39
источник пользователем
На других языках...                            


5 ответов

голоса
16

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

svn st | cut -c8- | xargs ls

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

Ответил 14/11/2008 в 10:46
источник пользователем

голоса
3

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

svn st | cut -c8- | xargs sed -i 's/\t/    /'
Ответил 14/11/2008 в 11:44
источник пользователем

голоса
3

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

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

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

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

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

Ответил 14/11/2008 в 10:45
источник пользователем

голоса
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используется для замены язычки с четырьмя пробелами в каждом файле.

Ответил 14/11/2008 в 11:14
источник пользователем

голоса
0

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

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

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

Вот что я должен остановить 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
Ответил 14/11/2008 в 12:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more