Archivos con espacios en bash
22 de June, 2010
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 archvios 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"