bash archivos con espacios

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"
Leave a Reply

Your email address will not be published. Required fields are marked *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.

LesOlivex