bash archivos con espacios

Table of Contents

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:

[bash]
# 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
[/bash]

Añadimos en un array los archivos recibidos:

[bash]
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
[/bash]

Añadimos lista de archivos a base de datos:

[bash]
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
[/bash]

Pasar un array de archivos a un comando colocando comillas para que no de problemas.:

[bash]
parametros="$(for n in `seq 0 $((${#aSALIDA[*]}-1))` ; do echo -n "'${aSALIDA[$n]}' " ; done)"
cmd="$mt_editor_dev $parametros"
eval "$cmd"
[/bash]

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

LesOlivex