Agregue types de files de origen específicos a svn recursivamente

Sé que este es un guión feo pero cumple su function. Lo que estoy enfrentando ahora es agregar algunas extensiones más, lo que desorderaría aún más el guión. ¿Cómo puedo hacer que sea más modular? Específicamente, ¿cómo puedo escribir esta expresión regular larga (extensiones de files fuente) en múltiples líneas? decir una extensión en cada línea. Supongo que estoy haciendo algo mal con la concatenación de cadenas, pero no estoy muy seguro de qué exactamente. Aquí está el file original:

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

y aquí está más o less a lo que apunto

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

¿Nadie?

Sé que esto no responde la pregunta directamente, pero desde una perspectiva de legibilidad, creo que la mayoría de los desarrolladores estarían de acuerdo en que una expresión regular de línea única es la forma más común de hacer las cosas y, por lo tanto, es el enfoque más sostenible. Además, no estoy seguro de por qué incluye un período en cada una de sus extensiones, esto solo debería usarse una vez.

Escribí este pequeño script para agregar automáticamente todas las imágenes a svn. Debería poder agregar extensiones entre las tuberías en la expresión regular para agregar o eliminar diferentes types de files. Tenga en count que solo se asegura de agregar files que no se reconocen al asegurarse de que cada línea comience con un "?" (^ \?) y termina con un punto (\. (extensiones) $). Espero que sea útil!

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

Qué tal esto:

 PATTERNS=" \.foo \.bar \.baz" # Put them into one list separated by or ("|"). PATTERNS=`echo $PATTERNS |sed 's/\s\+/|/g'` $COMMAND | grep -E "($PATTERNS)" 

(Tenga en count que esto no funcionaría si coloca comillas alnetworkingedor de $ PATTERNS en la llamada a echo – echo se está ocupando de eliminar espacios en blanco y convertir nuevas líneas en espacios para nosotros).

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