Trabajar con archivos que contienen espacios puede ser un dolor de cabeza con bash.
Aquí dejo un ejemplo de como hacerlo.
En este ejemplo vamos a buscar los archivos que subversion nos indica que han sido modificados:
# Se definie el fin de linea como el separador entre parámetros
DIFS="$IFS" ; IFS=$'\n'
echo
for x in $(svn status | grep ^M | awk -v FS='M ' '{printf "\n%s",$2}') ; do
echo - "$x"
parametros="$parametros '$x'"
done
IFS="$DIFS"
echo
read -n 1 -s -p 'Añadir (s/n): ' OPCION
if [ "$OPCION" = 's' ] ; then
cmd="$cmd $parametros" ; eval $cmd
fi
Añadimos en un array los archivos recibidos:
declare -a e_archivos_seleccionados=() c=0 while [ -n "$1" ]; do echo - "$c) $1" e_archivos_seleccionados[$c]="$1" shift 1 let c=c+1 done
Añadimos lista de archivos a base de datos:
for c in `seq 0 ${#e_archivos_seleccionados[*]}` ; do
x="${e_archivos_seleccionados[$c]}"
echo "- $x"
# Comprobar que no este ya en la base de datos
SQL="SELECT nombre from rMovimientoArchivos WHERE nombre='$x' AND idMovimiento=$movimientoId"
SALIDA=`ejecutarSQL "$SQL" "-N"`
if [ "$SALIDA" != "$x" ] ; then
SQL="INSERT INTO rMovimientoArchivos VALUES ($movimientoId,'$x')"
ejecutarSQL "$SQL"
if [ "$?" != "0" ] ; then
mensajes "Archivo: $x no fue añadido a movimiento: $movimientoId"
else
mensajes "Archivo: $x añadido a movimiento: $movimientoId"
fi
fi
done
Pasar un array de archivos a un comando colocando comillas para que no de problemas.:
parametros="$(for n in `seq 0 $((${#aSALIDA[*]}-1))` ; do echo -n "'${aSALIDA[$n]}' " ; done)"
cmd="$mt_editor_dev $parametros"
eval "$cmd"