繁体   English   中英

递归地将特定的源文件类型添加到svn

[英]Add specific source file types to svn recursively

我知道这是一个丑陋的脚本,但确实可以完成工作。 我现在面临的是添加更多扩展,这些混乱将使脚本更加混乱。 如何使它更具模块化? 具体来说,我该如何在多行上写这个长正则表达式(源文件扩展名)? 在每一行说一个分机。 我猜我在用字符串连接时做错了什么,但不确定确切是什么。 这是原始文件:

#!/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

有人吗

#!/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

这个怎么样:

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

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

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

(请注意,如果在对echo的调用中将$ PATTERNS周围的引号引起来,则此方法将不起作用-echo将为我们消除空格并将换行符转换为空格。)

我知道这并不能直接回答问题,但是从可读性的角度来看,我认为大多数开发人员都会同意单行正则表达式是最常用的处理方式,因此也是最可维护的方法。 此外,我不确定为什么在每个扩展中都包含一个句点,所以只需要使用一次即可。

我写了这个小脚本来自动将所有图像添加到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM