Добавить определенные типы исходных файлов в SVN рекурсивно - PullRequest
0 голосов
/ 12 октября 2011

Я знаю, что это ужасный сценарий, но он выполняет свою работу.Сейчас я сталкиваюсь с добавлением еще нескольких расширений, которые еще больше загромождают сценарий.Как я могу сделать его более модульным?В частности, как я могу написать это длинное регулярное выражение (расширения исходного файла) в несколько строк?скажем одно расширение в каждой строке.Я думаю, что я делаю что-то не так с конкатенацией строк, но не совсем уверен, что именно.Вот оригинальный файл:

#!/bin/bash
COMMAND='svn status'
XARGS='xargs'
SVN='svn add'
$COMMAND | grep -E '(\.m|\.mat|\.java|\.js|\.php|\.cpp|\.h|\.c|\.py|\.hs|\.pl|\.xml|\.html|\.sh|.\asm|\.s|\.tex|\.bib|.\Makefile|.\jpg|.\gif|.\png|.\css)'$ | awk ' { print$2 } ' | $XARGS $SVN

и вот примерно то, к чему я стремлюсь

...code code
'(.\m|
\.mat|
\.js|
.
.
.
.\css)'
..more code here

Кто-нибудь?

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Как насчет этого:

PATTERNS="
\.foo
\.bar
\.baz"

# Put them into one list separated by or ("|").
PATTERNS=`echo $PATTERNS |sed 's/\s\+/|/g'`

$COMMAND | grep -E "($PATTERNS)"

(Обратите внимание, что это не будет работать, если вы поместите кавычки вокруг $ PATTERNS в вызове echo - echo позаботится об удалении пробелов и преобразовании новых строк в пробелы для нас.)

1 голос
/ 25 января 2012

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

Я написал этот маленький скрипт для автоматического добавления всех изображений в SVN. Вы должны иметь возможность просто добавлять расширения между каналами в регулярном выражении, чтобы добавлять или удалять файлы разных типов. Обратите внимание, что он добавляет только файлы, которые не распознаны, так как каждая строка начинается с "?" (^ \?) и заканчивается точкой (\. (extensions) $). Надеюсь, это полезно!

#!/bin/bash

svn st | grep -E "^\?.*\.(png|jpg|jpeg|tiff|bmp|gif)$" > /tmp/svn-auto-add-img

while read output; do
    FILE=$(echo $output | awk '{ print $2 }')
    svn add $FILE
done < /tmp/svn-auto-add-img

exit 0
1 голос
/ 13 октября 2011
#!/bin/bash
COMMAND='svn status'
XARGS='xargs'
SVNADD='svn add'
pats=
pats+=' \.m'
pats+=' \.mat'
pats+=' \.java'
pats+=' \.js'

# add your 'or-able' sub patterns here

# build the full pattern 
pattern='(';for pat in $pats;do pattern+="$pat|";done;pattern=${pattern%\|}')$'

# run grep with the generated pattern
files=$($COMMAND | grep -E ${pattern} | awk ' { print $NF } ')
if [ " $files" != " " ]
then
   $COMMAND | grep -E ${pattern} | awk ' { print $NF } ' | $XARGS $SVNADD
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...